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>).Text -> 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 VB6:
' 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
Creación de control tipo árbol y adición de 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 .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
Código C#:
// 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. ICntTree treCapitulos = (ICntTree)gForm.Controls["treCapitulos"]; for (int i = 1; i <= treCapitulos.Nodes.Count; i++) { if (treCapitulos.Nodes[i].Checked) { MsgBox(treCapitulos.Nodes[i].Key); MsgBox(treCapitulos.Nodes[i].Text); break; } }
Creación de control tipo árbol y adición de nodos:
// Dentro de un frmGenerico añado el siguiente código: public void Show() { ICntTree lArbol = (ICntTree)gForm.Controls.Add("AhoraOCX.CntTree", "treCap", (gForm.Controls["panMain"] as ICntPanel)); if (lArbol == null) { gCn.Obj.ShowMsgBox("No se ha podido crear el formulario"); return; } lArbol.Height = 300; lArbol.Width = 221; lArbol.Left = 2; lArbol.TabIndex = 1; lArbol.Top = 3; lArbol.Visible = true; lArbol.TreeLevelWidth = 24; lArbol.Style = TreeStyleConstants.tvwTreelinesPlusMinusPictureText; lArbol.Checkboxes = true; lArbol.Nodes.Clear(); ICntTreeNode lNodo; lNodo = lArbol.Nodes.Add(null, ETreeNodeRelationship.tnrFirst, "PADREDATO", "PADRE"); lNodo.Expanded = true; lNodo = lArbol.Nodes.Add("PADREDATO", ETreeNodeRelationship.tnrChild, "DATOHIJO", "HIJO"); lNodo.Tag = "UnaEtiqueta"; lNodo = lArbol.Nodes.Add("PADREDATO", ETreeNodeRelationship.tnrChild, "DATOHIJO2", "HIJO2"); lNodo.Tag = "OtraEtiqueta"; lNodo.Expanded = true; lNodo = lArbol.Nodes.Add("PADREDATO", ETreeNodeRelationship.tnrChild, "DATOHIJO3", "HIJO3"); // Para eliminar: lArbol.Nodes.Remove("DATOHIJO3"); }