Cómo crear una propiedad de clave para un nodo de TreeView en Visual Basic

Para obtener una versión de Microsoft Visual C# de este artículo, consulte 322937 .

Resumen

En versiones anteriores del control TreeView , un nodo de TreeView tiene una propiedad de clave donde se puede almacenar información que pertenece a ese nodo. Puede utilizar esta clave para hacer referencia a los objetos de la colección de nodos. Esto resulta útil si se puede cambiar el orden de los objetos de la colección, o si necesita algún tipo de acceso indizado a los datos subyacentes. La versión del control TreeView que se incluye con Microsoft Visual Studio 2005 y con Microsoft Visual Studio .NET no tiene ninguna propiedad equivalente de clave .

Si desea utilizar la propiedad Key , tiene dos opciones:

  • Si debe almacenar información simple acerca del objeto, utilice la propiedad Tag del objeto TreeNode .
  • Si necesita la funcionalidad de indización basada en la colección, puede extender la clase TreeNode e implementar IDictionaryEnumerator.
En este artículo paso a paso describe la segunda opción y proporciona un ejemplo de cómo extender la clase TreeNode para agregar compatibilidad para una propiedad de clave .

Extender el control TreeView

  1. Cree un nuevo proyecto de biblioteca de controles de Windows:
    1. Inicie Visual Studio .NET o Visual Studio 2005.
    2. En el menú archivo , haga clic en nuevo y, a continuación, haga clic en proyecto.
    3. En la lista Tipos de proyecto , haga clic en Proyectos de Visual Basicy, a continuación, denomine el proyecto TreeViewEX.


      Nota: En Visual Studio 2005, haga clic en Visual Basic , en la lista Tipos de proyecto .
    4. En el explorador del proyecto, cambie el nombre de módulo de clase predeterminado de UserControl1.vb para TreeViewEX.vb.
    5. En la ventana de propiedades del control de usuario, cambie el nombre del control de UserControl1 a TreeViewEX.
  2. Heredar del control TreeView . De forma predeterminada, un proyecto de control de usuario hereda de System.Windows.Forms.UserControl. Cambie la declaración de clase para que herede de System.Windows.Forms.TreeView, como sigue.

    Nota: No modifique la sección "Código generado por el Diseñador de componentes".
    Public Class TreeViewEX  Inherits System.Windows.Forms.TreeView

  3. A continuación, cree una nueva clase TreeNode que herede de System.Windows.Forms.TreeNode. Puede hacerlo en el mismo módulo de clase TreeViewEX.vb o puede crear un módulo de clase independiente. Esta clase también implementa la interfaz IDictionaryEnumerator y agrega compatibilidad para enumerar los nodos de una colección. En este ejemplo, se utiliza el módulo de clase TreeViewEX.vb existente para esta nueva clase. Para crear la clase, agregue la siguiente definición de clase a TreeViewEX.vb.
    Public Class TreeNode    Inherits System.Windows.Forms.TreeNode
    Implements IDictionaryEnumerator

    Private nodeEntry As DictionaryEntry
    Private enumerator As IEnumerator

    Public Sub New()
    enumerator = MyBase.Nodes.GetEnumerator()
    End Sub

    Public Property NodeKey() As String
    Get
    Return nodeEntry.Key.ToString()
    End Get

    Set(ByVal Value As String)
    nodeEntry.Key = Value
    End Set
    End Property

    Public Property NodeValue() As Object
    Get
    Return nodeEntry.Value
    End Get

    Set(ByVal Value As Object)
    nodeEntry.Value = Value
    End Set
    End Property

    Public Overridable Overloads ReadOnly Property Entry() As DictionaryEntry _
    Implements IDictionaryEnumerator.Entry

    Get
    Return nodeEntry
    End Get
    End Property

    Public Overridable Overloads Function MoveNext() As Boolean _
    Implements IDictionaryEnumerator.MoveNext

    Dim Success As Boolean

    Success = enumerator.MoveNext()
    Return Success
    End Function

    Public Overridable Overloads ReadOnly Property Current() As Object _
    Implements IEnumerator.Current

    Get
    Return enumerator.Current
    End Get
    End Property

    Public Overridable Overloads ReadOnly Property Key() As Object _
    Implements IDictionaryEnumerator.Key

    Get
    Return nodeEntry.Key
    End Get
    End Property

    Public Overridable Overloads ReadOnly Property Value() As Object _
    Implements IDictionaryEnumerator.Value

    Get
    Return nodeEntry.Value
    End Get
    End Property

    Public Overridable Overloads Sub Reset() _
    Implements IEnumerator.Reset

    enumerator.Reset()
    End Sub
    End Class

  4. Esto finaliza el control TreeView extendido. Ahora compruebe que el proyecto se compila sin errores haciendo clic en Generar solución en el menú Generar .

Crear la aplicación cliente

  1. En el menú archivo , haga clic en nuevo y, a continuación, haga clic en proyecto.
  2. En la lista Tipos de proyecto , haga clic en Proyectos de Visual Basic.


    Nota: En Visual Studio 2005, haga clic en Visual Basic , en la lista Tipos de proyecto .
  3. En la lista plantillas , haga clic en Aplicación para Windowsy, a continuación, haga clic en Aceptar.
  4. Agregue una instancia del control TreeViewEX al formulario predeterminado del proyecto de aplicación de Windows:
    1. En el menú Herramientas , haga clic en Personalizar cuadro de herramientas.
    2. Haga clic en la ficha Componentes de.NET Framework .
    3. Haga clic en Examinary, a continuación, busque el archivo TreeViewEX.dll que se acaba de crear.
    4. Haga clic en Aceptar.
    5. El control TreeViewEX ahora se encuentra en el cuadro de herramientas. Agregue una instancia de este control al formulario.
  5. Agregue dos botones de comando al formulario.
  6. Pegue el código siguiente en el evento Load del formulario.
    Me.TreeViewEX1.Left = 10Me.TreeViewEX1.Top = 10
    Me.TreeViewEX1.Width = Me.Width - 30
    Me.TreeViewEX1.Height = CInt(Me.Height * 0.6)
    Me.TreeViewEX1.Anchor = AnchorStyles.Top Or AnchorStyles.Left _
    Or AnchorStyles.Right

    Me.Button1.Top = TreeViewEX1.Height + 20
    Me.Button1.Left = 10
    Me.Button1.Width = 200
    Me.Button1.Height = 50
    Me.Button1.Text = "Add Items to TreeViewEx"

    Me.Button2.Top = Button1.Top + Button1.Height + 10
    Me.Button2.Left = 10
    Me.Button2.Width = 200
    Me.Button2.Height = 50
    Me.Button2.Text = "Locate Item in TreeView using the Key Value"
    Me.Height = 400

  7. Pegue el código siguiente en el evento Click de Button1.
    Dim tn As TreeViewEX.TreeNodeDim myData As String

    myData = "Extra Information pertaining to Node"

    tn = New TreeViewEX.TreeNode()
    tn.Text = "This is node 1"
    tn.NodeKey = "node1"
    tn.NodeValue = myData + " 1"
    TreeViewEX1.Nodes.Add(tn)

    tn = New TreeViewEX.TreeNode()
    tn.Text = "This is node 2"
    tn.NodeKey = "node2"
    tn.NodeValue = myData + " 2"
    TreeViewEX1.Nodes.Add(tn)

    tn = New TreeViewEX.TreeNode()
    tn.Text = "This is node 3"
    tn.NodeKey = "node3"
    tn.NodeValue = myData + " 3"
    TreeViewEX1.Nodes.Add(tn)

    tn = New TreeViewEX.TreeNode()
    tn.Text = "This is node 4"
    tn.NodeKey = "node4"
    tn.NodeValue = myData + " 4"
    TreeViewEX1.Nodes.Add(tn)

    tn = New TreeViewEX.TreeNode()
    tn.Text = "This is node 5"
    tn.NodeKey = "node5"
    tn.NodeValue = myData + "5"
    TreeViewEX1.Nodes.Add(tn)

    tn = New TreeViewEX.TreeNode()
    tn.Text = "This is node 6"
    tn.NodeKey = "node6"
    tn.NodeValue = myData + " 6"
    TreeViewEX1.Nodes.Add(tn)

  8. Pegue el código siguiente en el evento Click de Button2.
    ' Locate the third node using the NodeKeyDim myData As String
    Dim nodeInfo As String
    Dim tn As TreeViewEX.TreeNode

    For Each tn In TreeViewEX1.Nodes
    If (tn.NodeKey = "node6") Then
    nodeInfo = "Name :" + tn.Text
    myData = CStr(tn.NodeValue)
    nodeInfo += "Data: " + myData

    MessageBox.Show(nodeInfo, "Node Specific Information", _
    MessageBoxButtons.OK, MessageBoxIcon.Information)
    Exit For
    End If
    Next

  9. Haga clic en Agregar elementos a TreeViewEX. Esto agrega muestra nodos TreeView y define los valores de los miembros clave y datos.
  10. Haga clic en Buscar el elemento. Después de hacer clic en este botón, un cuadro de mensaje aparece y muestra información sobre el nodo 6 basado en el uso de la propiedad de clave en un bucle foreach .
Propiedades

Id. de artículo: 311318 - Última revisión: 22 ene. 2017 - Revisión: 1

Comentarios