Manipular un TreeView por código
Artículo por Club Developers · 11 mayo 2006
2724 vistas
La manipulación del árbol de un TreeView puede ser compleja si el concepto de nodo no lo tenemos bien asimilado. Los objetos TreeNodes que componen un bjeto TreeView son colecciones recursivas a las que podemos aplicar las siguiente reglas:
Como són colecciones recursivas, podrÃamos hacer una función que recorra todos los nodos hijos del nodo pasado por parámetro:
No es sencillo saber la posición gerárquica de un nodo. Para encontrarla, podemos realizar la siguiente función recursiva:
Ejemplo de llamada:
No obstante, a menudo este método no es el más obtimo, devido a que los procedimientos recursivos son costosos en recursos. En la construcción del TreView se suele saber el nivel gerárquico del nodo que se está almacenando, por lo que puede ser una buena práctica almacenar el nivel en la propiedad Tag del nuevo nodo.
- Sólo existe un nodo 'Root' y se identifica por su valor "Nothing" de su parent
- Un nodo sólo tiene un parent
- Un nodo sólo da información de sus descendientes directos
Como són colecciones recursivas, podrÃamos hacer una función que recorra todos los nodos hijos del nodo pasado por parámetro:
vbnet
Private Sub RecorrerNodos(ByVal MiNodo As TreeNode)   Dim MiEnum As IEnumerator = MiNodo.Nodes.GetEnumerator   While MiEnum.MoveNext     RecorrerNodos(CType(MiEnum.Current, TreeNode))   End While End Sub
No es sencillo saber la posición gerárquica de un nodo. Para encontrarla, podemos realizar la siguiente función recursiva:
vbnet
Private Function Nivel(ByVal MiNodo As TreeNode, ByVal Start As Boolean) As Int32   Static Pos As Int32   If Start Then Pos = 0   If MiNodo.Parent Is Nothing Then     Return Pos   Else     Pos += 1     Nivel(MiNodo.Parent, False)     Return Pos   End If End Function
Ejemplo de llamada:
vbnet
No obstante, a menudo este método no es el más obtimo, devido a que los procedimientos recursivos son costosos en recursos. En la construcción del TreView se suele saber el nivel gerárquico del nodo que se está almacenando, por lo que puede ser una buena práctica almacenar el nivel en la propiedad Tag del nuevo nodo.