Como saber Treeview

27/07/2004 - 18:06 por ALAN | Informe spam
Como saber si el parent de un nodo es el nodo raiz???

Preguntas similare

Leer las respuestas

#1 AJPB
27/07/2004 - 19:21 | Informe spam
Umm..., sera si su padre es Nothing?

Como saber si el parent de un nodo es el nodo raiz???
.

Respuesta Responder a este mensaje
#2 Anonimo
27/07/2004 - 20:13 | Informe spam
Si te refieres a esto marca error

If TreeView1.SelectedNode.Parent.Index = Nothing Then

Quiero detectar el nodo raiz


Umm..., sera si su padre es Nothing?

Como saber si el parent de un nodo es el nodo raiz???
.



.

Respuesta Responder a este mensaje
#3 Leonardo Azpurua
27/07/2004 - 22:28 | Informe spam
escribió en el mensaje
news:520c01c47405$614448a0$
Si te refieres a esto marca error

If TreeView1.SelectedNode.Parent.Index = Nothing Then

Quiero detectar el nodo raiz




If SelectedNode.Parent.Parent is Nothing Then
... es el nodo raiz.

Puedes tener problemas si aplicas este codigo a un nodo raiz, ya que su
Parent es Nothing, y al intentar acceder a (Nothing).Parent se dispará un
error.

Para buscar la raiz de un Nodo N, simplemente recorres la lista hacia
arriba, hasta encontrar un nodo sin raiz:

Dim Candidato as Nodo = N
Do While Not Candidato.Parent Is Nothing
Candidato = Candidato.Parent
Loop
' Candidato es el nodo raiz del arbol que contiene a N

Salud!

Leonardo
Respuesta Responder a este mensaje
#4 gracias
27/07/2004 - 23:00 | Informe spam
otra pregunta aprovechando, sabes como recorrer toto el
arbol???


escribió en el


mensaje
news:520c01c47405$614448a0$
Si te refieres a esto marca error

If TreeView1.SelectedNode.Parent.Index = Nothing Then

Quiero detectar el nodo raiz




If SelectedNode.Parent.Parent is Nothing Then
... es el nodo raiz.

Puedes tener problemas si aplicas este codigo a un nodo


raiz, ya que su
Parent es Nothing, y al intentar acceder a


(Nothing).Parent se dispará un
error.

Para buscar la raiz de un Nodo N, simplemente recorres


la lista hacia
arriba, hasta encontrar un nodo sin raiz:

Dim Candidato as Nodo = N
Do While Not Candidato.Parent Is Nothing
Candidato = Candidato.Parent
Loop
' Candidato es el nodo raiz del arbol que contiene a


N

Salud!

Leonardo


.

Respuesta Responder a este mensaje
#5 Leonardo Azpurua
28/07/2004 - 00:46 | Informe spam
"gracias" escribió en el mensaje
news:54d201c4741c$b5543ec0$
otra pregunta aprovechando, sabes como recorrer toto el
arbol???
-

Me has obligado a interesarme por primera vez en el control Tree View de
.Net (y es muy bonito).

Los "arboles" realmente se implementan como una coleccion de Nodos, cada uno
de los cuales puede contener una coleccion de Nodos. De manera que no son un
árbol en el sentido clásico, sino una coleccion de colecciones (como un
árbol que creciera hacia adentro, que no es lo mismo pero funciona igual).

La colección Nodes de un objeto TreeView contiene la lista de los Nodos raiz
ubicados en el TreeView.

Sobre tu pregunta anterior, para determinar de manera segura si un nodo N
está en "la raiz" (es decir directamente contenido en) de un treeview,
puedes simplemente preguntar
TreeView1.Nodes.Contains(N)

Supongamos que quieres copiar el contenido del TreeView en la ventana de
salida (Output Window) de VS, precediendo cada nodo con tantos espacios como
niveles lo separen de la raiz.

Entonces aplicarías un procedimiento recursivo, que activarias como:

DumpNodos(TreeView1.Nodes, 0)

siendo DumpNodos así:

Public Sub DumpNodos(ListaNodos As TreeViewCollection, Nivel)
Dim Nodo As TreeNode
If ListaNodos Is Nothing Then Return
For Each Nodo In Nodos
Debug.WriteLine("{0}{1}", Space(Nivel), Nodo.ToString)
DumpNodos(Nodo.Nodes, Nivel + 1)
Next
End Sub


Si quieres tener un componente genérico para recorrer los nodos de un
TreeView, puedes declarar:

Delegate Function ProcesarNodo(Nodo As TreeNode, Level As Integer) As
Boolean;

(esto es una función encargada de ejecutar un proceso sobre cada nodo
particular, que será llamada por el procedimiento genérico de recorrido del
arbol; si la función devuelve False, el proceso continuará; si devuelve
True, se abortará).

y tener en algun lugar (tal vez como miembro Shared de una clase de
utilidades):

Public Function RecorrerNodos( _
ListaNodos As TreeViewCollection, _
Proceso As ProcesarNodo, _
Optional Level As Integer = 0 ) As Boolean
Dim Nodo As TreeNode

If ListaNodos Is Nothing Then Return False
For Each Nodo In ListaNodos
If Proceso(Nodo, Level) Then
Return True
End If
If RecorrerNodos(Nodo.Nodes, Proceso, Level + 1) Then
Return True
End If
Next

Return False
End Function

Para lograr lo que hicimos antes tendríamos:

Function DumpNodo(n As TreeNode, l As Integer) As Boolean
Debug.WriteLine("{0}{1}", Space(l), n.ToString)
Return False
End Function

y

ClaseUtilitaria.RecorrerNodos(TreeView1.Nodes, AddressOf DumpNodo)

Por ultimo, este recorrido se basa en procesar primero cada nodo luego sus
descendientes.

Si quieres procesar primero los descendientes y luego las raices, debes
invertir el orden:

If RecorrerNodos(Nodo.Nodes, Proceso, Level + 1) Then
Return True
End If
If Proceso(Nodo, Level) Then
Return True
End If

Salud!

Leonardo
[MVP Visual Basic]
leonardo<arroba>mvps<punto>org

"El presente es una luz que palpita entre dos tinieblas"
- Naguib Mahfuz
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida