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
NextCreació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 SubCó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");
}