TreeView - Acceso a nodos seleccionados y su clave

Creado por David Miralpeix, Modificado el Fri, 16 Feb 2024 a las 12:26 PM por David Miralpeix

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

}

¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo