TreeView (Control)

Un control TreeView muestra una lista jerárquica de objetos Node, cada uno de los cuales consta de una etiqueta y un mapa de bits opcional. Los controles TreeView se utilizan habitualmente para mostrar los encabezados de un documento, las entradas de un índice, los archivos y directorios de un disco o cualquier otro tipo de información que pueda ser útil ver en una estructura jerárquica.

Sintaxis

Treeview

Comentarios

 

Una vez creado un control TreeView, puede agregar, quitar, organizar y manipular de diversas formas los objetos Node si establece propiedades e invoca métodos. Puede expandir y contraer mediante programa los objetos Node para mostrar u ocultar todos los nodos secundarios. Existen tres eventos, Collapse, Expand y NodeClick, que también ofrecen funcionalidad mediante programa.

Puede desplazarse por un árbol en el código si recupera una referencia a los objetos Node mediante las propiedades Root, Parent, Child, FirstSibling, Next, Previous y LastSibling. Los usuarios también pueden desplazarse por un árbol mediante el teclado. Las teclas FLECHA ARRIBA y FLECHA ABAJO recorren hacia abajo uno a uno todos los objetos Node expandidos. Los objetos Node se seleccionan de izquierda a derecha y de arriba abajo. En la parte inferior del árbol, la selección vuelve a la parte superior y la ventana se desplaza si es necesario. Las teclas FLECHA DERECHA y FLECHA IZQUIERDA también permiten desplazarse por los objetos Node expandidos, pero si presiona la tecla FLECHA DERECHA cuando hay seleccionado un nodo no expandido, éste se expandirá y una segunda pulsación desplazará la selección al siguiente objeto Node. Por el contrario, al presionar FLECHA IZQUIERDA cuando hay seleccionado un objeto Node expandido, éste se contrae Si el usuario presiona una tecla ANSI , el enfoque pasará al objeto Node más próximo que comience con esa letra. Si se presiona repetidamente la misma tecla, la selección recorrerá uno a uno todos los nodos expandidos que comiencen por esa letra.

Existen diversos estilos que modifican la apariencia del control. Los objetos Node pueden aparecer con una de ocho combinaciones posibles de texto, mapas de bits, líneas y signos más y menos.

El control TreeView utiliza el control ImageList, especificado por la propiedad ImageList, para almacenar los mapas de bits e iconos mostrados en los objetos Node. Un control TreeView sólo puede usar un control ImageList cada vez. Esto significa que todos los elementos del control TreeView tendrán una imagen del mismo tamaño junto a ellos al establecer la propiedad Style del control TreeView a un estilo que muestre imágenes.

Nota para la distribución   El control TreeView forma parte de un grupo de controles ActiveX que se encuentran en el archivo MSCOMCTL.OCX. Para usar el control TreeView en su aplicación, debe agregar el archivo MSCOMCTL.OCX al proyecto. Cuando distribuya su aplicación, instale el archivo MSCOMCTL.OCX en el directorio System o System32 de Microsoft Windows del usuario.

 

Usar el control TreeView

El control TreeView está diseñado para mostrar datos de naturaleza jerárquica, como árboles organizativos, las entradas de un índice, o los archivos y directorios de un disco.

Figura 2.40   Un control TreeView típico

Aplicaciones posibles

Establecer las propiedades del objeto Node

Un "árbol" se compone de ramas sucesivas de "nodos" y cada nodo consta normalmente de una imagen (establecida con la propiedad Image) y una etiqueta (establecida con la propiedad Text). Un control ImageList asociado al control TreeView proporciona las imágenes para los nodos. Si desea obtener más información acerca del uso del control ImageList con otros controles, vea "Usar el control ImageList".

Un nodo puede expandirse o contraerse dependiendo de si tiene o no nodos secundarios (nodos que parten de él). En el nivel superior están los nodos "raíz", y cada nodo raíz puede tener cualquier número de nodos secundarios. El número total de nodos no está limitado (salvo por las restricciones del sistema ). En la figura 2.41 se muestra un árbol con dos nodos raíz. "Raíz 1" tiene tres nodos secundarios y "Secundario 3" tiene a su vez un nodo secundario. "Raíz 2" tiene nodos secundarios, como indica el signo "+", pero está sin expandir.

Figura 2.41   Nodos raíz y nodos secundarios

Cada nodo de un árbol es en realidad un objeto Node programable que pertenece a la colección Nodes. Como en otras colecciones, cada miembro de la colección tiene un valor único en las propiedades Index y Key, lo que permite el acceso a las propiedades del nodo. Por ejemplo, el código siguiente utiliza el índice de un nodo determinado ("7") para establecer sus propiedades Image y Text:

tvwMiÁrbol.Nodes(7).Image = "cerrado"

tvwMiÁrbol.Nodes(7).Text = "IEEE"

Sin embargo, si se ha asignado al nodo una clave única, por ejemplo "7 ID", el mismo código se podría escribir de esta forma:

tvwMiÁrbol.Nodes("7 ID").Image = "cerrado"

tvwMiÁrbol.Nodes("7 ID").Text = "IEEE"

 

Relaciones entre nodos y referencias a nodos relativos

Cada nodo puede ser secundario o primario, según su relación con otros nodos. El objeto Node cuenta con varias propiedades que devuelven distintos datos sobre los nodos secundarios o primarios. Por ejemplo, el código siguiente utiliza la propiedad Children para devolver el número de nodos secundarios que tiene un nodo (si tiene alguno):

MsgBox tvwMiÁrbol.Nodes(10).Children

Sin embargo, algunas de las propiedades no devuelven información como lo hace Children, sino que devuelven una referencia a otro objeto Node. Por ejemplo, la propiedad Parent devuelve una referencia al nodo primario de un nodo específico (siempre y cuando no sea el nodo raíz). Con esta referencia puede manipular el nodo primario si invoca los métodos o establece las propiedades aplicables a los objetos Node. Por ejemplo, el código siguiente obtiene los valores de las propiedades Text e Index de un nodo primario:

MsgBox tvwMiÁrbol.Nodes(10).Parent.Text

MsgBox tvwMiÁrbol.Nodes(10).Parent.Index

 

Sugerencia   Puede usar la instrucción Set con una variable de objeto de tipo Node para manipular referencias a otros objetos Node. Por ejemplo, el código siguiente establece una variable de objeto Node con la referencia que devuelve la propiedad Parent. Después se utiliza la variable de objeto para devolver las propiedades del nodo relativo:

Dim tempNode As Node ' Declara una variable de objeto.

' Establece la variable con la referencia devuelta.

Set tempNode = tvwMiÁrbol.Nodes(10).Parent

MsgBox tempNode.Text ' Devuelve la propiedad Text del nodo primario.

MsgBox tempNode.Index ' Devuelve la propiedad Index del nodo primario.

 

Agregar objetos Node a la colección Nodes

Para agregar un objeto Node al árbol, utilice el método Add (colección Nodes). Este método tiene dos argumentos, relative y relationship, que determinan dónde se agregará el nodo. El primer argumento, relative, indica el nombre de un nodo, mientras que el segundo, relationship, especifica la relación entre el nuevo nodo y el indicado en relative.

Por ejemplo, el código siguiente agrega un nodo denominado "nodo 11" como un nodo secundario de otro llamado "nodo 7". La constante intrínseca tvwChild especifica que el nuevo nodo es un nodo secundario del indicado en el primer argumento. El tercer argumento asigna la propiedad Key al nuevo nodo.

tvwMiÁrbol.Nodes.Add "nodo 7", tvwChild, "nodo 11"

Otras relaciones posibles son las siguientes:

Por ejemplo, suponga que hay tres nodos y que desea colocar un cuarto nodo entre el segundo y el tercero. El código sería el siguiente:

' Suponiendo que el valor de Key para el segundo

' nodo es "nodo 2".

tvwMiÁrbol.Nodes.Add "nodo 2", tvwNext

Otros argumentos del método Add son key, text e image. Con estos argumentos puede asignar las propiedades Key, Text e Image al crear el nuevo objeto Node.

Para obtener más información   Si desea obtener más información acerca del método Add de la colección Nodes, vea "Método Add", escribiendo "Método Add" en la búsqueda de Índice y haciendo clic en "Método Add (colección Nodes)".

 

Una segunda forma de agregar nodos es declarar una variable de objeto de tipo Node y usar luego la instrucción Set con el método Add. La instrucción Set establece la variable de objeto con el nuevo nodo. Después, puede usar la variable de objeto para establecer las propiedades del nodo, como se muestra a continuación:

Dim nodX As Node

Set nodX = tvwMiÁrbol.Nodes.Add("nodo 10", tvwChild)

nodX.Key = "nodo 11"

nodX.Text = "IEEE"

nodX.Image = "cerrado"

Sugerencia   Usar la instrucción Set con el método Add facilita la lectura y depuración del código. Sin embargo, usar el método Add y sus argumentos para agregar nodos crea un código más rápido.

 

 

Ejemplos