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");

}