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