Control TreeView


Una particularidad importante de uso sobre este tipo de control; no permite control de eventos por código por lo que cada vez que se necesite recuperar información sobre un control de este tipo hay que realizar un botón o tratar en alguno de los existentes para otros controles de la misma pantalla.


Para acceder a los datos del TreeView hay que usar la colección "Nodes" contenida dentro del control cuyas propiedades más útiles son:


- Nodes.Count -> Total de nodos. Útil para recorrerse el árbol.

- Nodes(<Número de Nodo>) -> Devuelve el texto visible del nodo.

- Nodes(<Número de Nodo>).Key -> Devuelve la clave del nodo.

- Nodes(<Número de Nodo>).Checked -> Devuelve "True" si el árbol tiene un checkbox en los nodos y está activo.

- SelectedItem -> Devuelve el texto del nodo seleccionado. Es útil para saber exactamente qué nodo del árbol está seleccionado en ese momento. Devuelve un único valor.

- SelectedItem.Key -> Devuelve la clave del nodo seleccionado. Es útil para saber exactamente qué nodo del árbol está seleccionado en ese momento. Devuelve un único valor.

Código ejemplo

' Recorremos el árbol "treCapitulos" para comprobar si alguno de sus nodos están o no seleccionados. En ese caso mostramos en un mensaje tanto el valor del texto visible como el valor de la key del nodo. 

For i = 1 To gForm.Controls("treCapitulos").Nodes.Count

    If gForm.Controls("treCapitulos").Nodes(i).Checked Then 

        MsgBox gForm.Controls("treCapitulos").Nodes(i).Key

        MsgBox gForm.Controls("treCapitulos").Nodes(i)

    End If

Next


Mediante este código hemos llegado a poder crear un control de tipo árbol y añadir nodos.


Dentro de un frmGenerico añado el siguiente código: 


Sub Show()

 Set lArbol = gForm.Controls.Add("MSComctlLib.TreeCtrl.2", "treCap", gForm.Controls("panMain"))
  
  If lArbol Is Nothing Then
    gcn.obj.showmsgBox "No se ha podido crear el formulario"
    Exit Sub
  End if
  
  With lArbol
         .Height          =   4500
         .Width           =   3315
         .Left            =   30
         .TabIndex        =   1
         .Top             =   50
         .Visible         =   1   'False 0
         .Indentation     =   353
         .LineStyle       =   1
         .Style           =   7
         .Checkboxes      =   -1  'True
         .Appearance      =   0
  End With
  

  lArbol.Nodes.Clear     
  Set lNodo = lArbol.Nodes.Add(, , "PADREDATO", "PADRE")   
  lNodo.Expanded = True    
  Set lNodo = lArbol.Nodes.Add("PADREDATO" , 4, "DATOHIJO", "HIJO") '4 es hijo
  lNodo.Tag = "UnaEtiqueta"
  Set lNodo = lArbol.Nodes.Add("PADREDATO" , 4, "DATOHIJO2", "HIJO2")  '4 es hijo
  lNodo.Tag = "OtraEtiqueta"

  lNodo.Expanded = True  


 'Para eliminar: 
 'lArbol.Nodes.Remove Nod.Index ' sustituir NodIndex por el valor correspondiente: "DATOHIJO2"


End Sub
Autor: Pablo Céspedes