Treeview
Hola a tod@s,
¿Cómo puedo saber el nivel que ocupa el selecteditem de un treeview?
Si por ejemplo tengo 3 niveles de elementos:
nivel1
--------nivel2
----------------nivel3
¿Cómo puedo saber qué nivel ocupa el elemento seleccionado en ese momento?
Gracias
Un saludo
sdemingo
¿Cómo puedo saber el nivel que ocupa el selecteditem de un treeview?
Si por ejemplo tengo 3 niveles de elementos:
nivel1
--------nivel2
----------------nivel3
¿Cómo puedo saber qué nivel ocupa el elemento seleccionado en ese momento?
Gracias
Un saludo
sdemingo
Pues a falta de una propiedad o método que lo calcule directamente,
puedes ir contando hacia atrás con la propiedad Parent
del objeto Node.
Te pongo un ejemplo que lo verás mas claro. El ejemplo
necesita un treeview, un label y un commandbutton.
Private Sub Form_Load()
With TreeView1.Nodes
.Add , tvwFirst, , "nodo 1"
.Add 1, tvwChild, , "nodo 1.1"
.Add 2, tvwLast, , "nodo 1.2"
.Add 3, tvwChild, , "nodo 1.2.1"
.Add , tvwLast, , "nodo 2"
.Add , tvwLast, , "nodo 3"
End With
End Sub
Private Sub Command1_Click()
MsgBox "nodo en nivel " & CStr(contarNivel(TreeView1.SelectedItem))
End Sub
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
Label1.Caption = "nodo en nivel " & CStr(contarNivel(Node))
End Sub
Private Function contarNivel(ByRef nodo As Node) As Integer
Dim auxNode As Node
Set auxNode = nodo
Do While Not (auxNode.Parent Is Nothing)
contarNivel = contarNivel + 1
Set auxNode = auxNode.Parent
Loop
End Function
puedes ir contando hacia atrás con la propiedad Parent
del objeto Node.
Te pongo un ejemplo que lo verás mas claro. El ejemplo
necesita un treeview, un label y un commandbutton.
Private Sub Form_Load()
With TreeView1.Nodes
.Add , tvwFirst, , "nodo 1"
.Add 1, tvwChild, , "nodo 1.1"
.Add 2, tvwLast, , "nodo 1.2"
.Add 3, tvwChild, , "nodo 1.2.1"
.Add , tvwLast, , "nodo 2"
.Add , tvwLast, , "nodo 3"
End With
End Sub
Private Sub Command1_Click()
MsgBox "nodo en nivel " & CStr(contarNivel(TreeView1.SelectedItem))
End Sub
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
Label1.Caption = "nodo en nivel " & CStr(contarNivel(Node))
End Sub
Private Function contarNivel(ByRef nodo As Node) As Integer
Dim auxNode As Node
Set auxNode = nodo
Do While Not (auxNode.Parent Is Nothing)
contarNivel = contarNivel + 1
Set auxNode = auxNode.Parent
Loop
End Function
