2 mar 2012

[WinForm] - Recorrer TreeView con Checkbox e imprimir marcados.

 

Buen Día a todos! Eh visto la necesidad de publicar esto debido a la gran duda de varios usuarios de ¿Cómo recorrer un TreeView? como mínimo. Colocaré los codigos tanto en c# como en vb para facilitarles un poco la vida,para que la analizen y sigamos todos progresando por lo más mínimo que sea =).

Bien, para comenzar debemos saber que un TreeView es una colección de nodos ordenados de manera jerárquica(Padre-Hijo), es con esta definición que nos abrirá un poco la lógica hacia codificación, veamos :

Código en VB.NET :

'Se Declara una colección de nodos apartir de tu Treeview
'del que se va a recorrer
Dim nodes As TreeNodeCollection = TuTreeView.Nodes
'Se recorren los nodos principales
For Each n As TreeNode In nodes
    'Se Declara un metodo para que recorra los hijos de los principales
    'Y los hijos de los hijos....Recorrido Total en pocas palabras
    'Para ello se envía el nodo actual para evaluar si tiene hijos
    RecorrerNodos(n)
Next

* Se Declara el método “RecorrerNodos” :



Private Sub RecorrerNodos(treeNode As TreeNode)
    Try
        'Si el nodo que recibimos tiene hijos se recorrerá
        'para luego verificar si esta o no checado
        For Each tn As TreeNode In treeNode.Nodes
            'Se Verifica si esta marcado...
            If tn.Checked = True Then
                'Si esta marcado mostramos el texto del nodo
                MessageBox.Show(tb.Text)
            End If
            'Ahora hago verificacion a los hijos del nodo actual            
            'Esta iteración no acabara hasta llegar al ultimo nodo principal
            RecorrerNodos(tn)
        Next
    Catch ex As Exception
        MessageBox.Show(ex.ToString())
    End Try
End Sub

Ahora el código en C#.NET :

*Este código se puede colocar por ejemplo en el evento Click de un boton :



//Se Declara una colección de nodos apartir de tu Treeview
//del que se va a recorrer
 
{
 TreeNodeCollection nodes = TuTreeView.Nodes;
 //Se recorren los nodos principales
 foreach (TreeNode n in nodes) {
  //Se Declara un metodo para que recorra los hijos de los principales
  //Y los hijos de los hijos....Recorrido Total en pocas palabras
  //Para ello se envía el nodo actual para evaluar si tiene hijos
  RecorrerNodos(n);
 }
}

* Se Declara el método “RecorrerNodos” :



private void RecorrerNodos(TreeNode treeNode)
{
 try {
  //Si el nodo que recibimos tiene hijos se recorrerá
  //para luego verificar si esta o no checado
  foreach (TreeNode tn in treeNode.Nodes) {
   //Se Verifica si esta marcado...
   if (tn.Checked == true) {
    //Si esta marcado mostramos el texto del nodo
    MessageBox.Show(tb.Text);
   }
   //Ahora hago verificacion a los hijos del nodo actual
   //Esta iteración no acabara hasta llegar al ultimo nodo principal
   RecorrerNodos(tn);
  }
 } catch (Exception ex) {
  MessageBox.Show(ex.ToString());
 }
}

Espero les haya sido de mucha utilidad, pues con este ejemplo pueden explotar un poco más su imaginación. Saludos!.

7 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Muchas gracias amigo, quisiera saber si ¿aplica también para cuando el TreeView tiene 5 niveles de hijos? Ejemplo:

    Padre1
    ...Hijo1
    ......SubHijo1
    .........UnoMás
    ............OtroMás
    ......SubHijo2
    .........UnoMás
    ............OtroMás

    ...

    Muchas gracias por tu aporte encontrar sobre treeviews en Internet está complejo.

    ResponderEliminar