Visual Basic.NET - Como recorro TODOS los nodos de un Treeview? Ayuda

 
Vista:
sin imagen de perfil

Como recorro TODOS los nodos de un Treeview? Ayuda

Publicado por cprcrack (12 intervenciones) el 26/10/2006 17:13:59
Ojalá puedan ayudarme, el caso es que necesito buscar en un TreeView llamado TV un nodo que tenga la propiedad Text por ejemplo igual a "Encontrado!"

Hasta ahora lo que hacía era esto:

Dim Node As TreeNode
For each Node in TV.Nodes
If Node.Text = "Encontrado!" Then MsgBox("Encontrado!")
next

El problema es que con ese método solo busca en los nodos raices, en los de nivel 0 vamos, y yo quiero que busque en todos los nodos y en todos los subnodos. Para buscar por ejemplo en los subnodos del segundo nodo del primer nivel se haría así... (recordad base 0)

For each Node in TV.Nodes(1).Nodes

Para buscar en el los subnodos del primer subnodo del 3er nodo raiz así...

For each Node in TV.Nodes(2).Nodes(0).Nodes

Pero como lo hago para buscar en TODOS a la vez? He pensado mucho y no consigo sacar un método, creo que no me da la cabeza jiji. Por favor ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Como recorro TODOS los nodos de un Treeview? Ay

Publicado por bernardo (1 intervención) el 30/10/2006 14:15:37
No sé si esto te valdrá pero lo que me imagino que pides se puede solucionar con algo parecido a lo que te muestro a continuación:

1º) Cuando creas el treeview asigna un tag( etiqueta identificadora) a cada uno de los nodos.

2º) Me imagino que querrás saber si el nodo seleccionado es el encontrado. En el evento after_select , que es el que se dispara cuando un nodo es seleccionado, tienes que recorrer todo el treeview. Con las propiedades del parámetro "e" podrás saber información de los nodos sin tener que saber en qué nivel jerárquico estás porque lo busca en todos.

Ejemplo con coches de venta en España de la marca Seat y Citröen:


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

TreeView1.Nodes.Add("seat")
TreeView1.Nodes(0).Tag = "spadre"
TreeView1.Nodes(0).Nodes.Add("arosa")
TreeView1.Nodes(0).Nodes(0).Tag = "shijoa"
TreeView1.Nodes(0).Nodes.Add("ibiza")
TreeView1.Nodes(0).Nodes(1).Tag = "shijoi"
TreeView1.Nodes(0).Nodes.Add("toledo")
TreeView1.Nodes(0).Nodes(2).Tag = "shijot"
TreeView1.Nodes(0).Nodes.Add("leon")
TreeView1.Nodes(0).Nodes(3).Tag = "shijol"
TreeView1.Nodes(0).Nodes(0).Nodes.Add("sports")
TreeView1.Nodes(0).Nodes(0).Nodes(0).Tag = "shijoas"
TreeView1.Nodes(0).Nodes(0).Nodes.Add("comforts")
TreeView1.Nodes(0).Nodes(0).Nodes(1).Tag = "shijoac"

TreeView1.Nodes.Add("citroën")
TreeView1.Nodes(1).Tag = "cpadre"
TreeView1.Nodes(1).Nodes.Add("c2")
TreeView1.Nodes(1).Nodes(0).Tag = "chijo2"
TreeView1.Nodes(1).Nodes.Add("c3")
TreeView1.Nodes(1).Nodes(1).Tag = "chijo3"
TreeView1.Nodes(1).Nodes.Add("c4")
TreeView1.Nodes(1).Nodes(2).Tag = "chijo4"
TreeView1.Nodes(1).Nodes(0).Nodes.Add("sportc")
TreeView1.Nodes(1).Nodes(0).Nodes(0).Tag = "chijo2s"
TreeView1.Nodes(1).Nodes(0).Nodes.Add("comfortc")
TreeView1.Nodes(1).Nodes(0).Nodes(1).Tag = "chijo2c"

End Sub

Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect

Dim ncount As Int16

En "a" se almacena el número total de nodos que hay en el árbol'
El valor true indica que diga cuantos nodos hay a nivel de los padres y de los hijos y de sus hijos, es decir todos. Si pusieras false entonces sólo almacenaría el número de nodos padres que, en este caso son 2

Dim a As Int16 = TreeView1.GetNodeCount(True)

Recorrer todo el árbol y busca dentro de él el que tenga el tag al valor seleccionado sin tener en cuenta qué nivel de jerarquía tiene y cuando lo encuentra muestra un mensaje

For ncount = 0 To a - 1
If e.Node.Tag = "chijo2c" Then
msgbox ("citröen c2 comfort encontrado")
exit for
End If
Next
End Sub

Espero que te haya servido este ejemplo
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como recorro TODOS los nodos de un Treeview? Ay

Publicado por javier (1 intervención) el 29/04/2014 12:35:41
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub PrintRecursive(ByVal n As TreeNode)
   System.Diagnostics.Debug.WriteLine(n.Text)
   MessageBox.Show(n.Text)
   Dim aNode As TreeNode
   For Each aNode In n.Nodes
      PrintRecursive(aNode)
   Next
End Sub
 
' Call the procedure using the top nodes of the treeview.
Private Sub CallRecursive(ByVal aTreeView As TreeView)
   Dim n As TreeNode
   For Each n In aTreeView.Nodes
      PrintRecursive(n)
   Next
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar