4D v12.4

Gestión de list box jerárquicos

Inicio

 
4D v12.4
Gestión de list box jerárquicos

 

Gestión de list box jerárquicos  


 

 

4D v12 le permite especificar y usar list box jerárquicos. Un list box jerárquico es un list box en el cual el contenido de la primera columna aparece en forma jerárquica. Este tipo de representación se adapta a la presentación de la información, incluyendo los valores repetidos y/o jerárquicamente dependientes (país/región/ciudad...).

Sólo los list box de tipo array pueden ser jerárquicos.

Los list boxes de tipo jerárquico son una forma de representación particular de los datos pero no modifican la estructura de estos datos (los arrays). Los list boxes jerárquicos se llenan y manejan exactamente del mismo modo que los list  box regulares (ver ).

Para especificar un list box jerárquico, hay tres posibilidades diferentes:

  • configurar manualmente los elementos jerárquicos utilizando la lista de propiedades del editor de formularios o utilizando el menú emergente de gestión de list box. Estos puntos se tratan en el Manual de Diseño de 4D.
  • utilizar los comandos LISTBOX SET HIERARCHY y LISTBOX GET HIERARCHY.

Cuando se abre por primera vez un formulario que contiene un list box jerárquico, por defecto todas las líneas se despliegan.
Una línea de ruptura y un "nodo" jerárquico se agregan automáticamente al list box cuando los valores se repiten en los arrays. Por ejemplo, imagine un list box que contiene cuatro arrays especificando las ciudades, cada ciudad caracterizada por un país, una región, un nombre y un número de habitantes:

Si este list box se muestra en forma jerárquica (los tres primeros arrays se incluyen en la jerarquía), se obtiene:

Los arrays no se ordenan antes de la construcción de la jerarquía. Si, por ejemplo, un array contiene los datos AAABBAACC, la jerarquía obtenida será:

> A
> B
> A
> C

Para expander o contraer un "nodo" jerárquico, simplemente haga clic en él. Si presiona Alt+clic (Windows) u Opción+clic (Mac OS) en el nodo, todos sus sub-elementos se expandirán o contraerán. Estas operaciones también pueden realizarse por programación utilizando los comandos LISTBOX EXPAND y LISTBOX COLLAPSE.

Un list box jerárquico muestra un número variable de líneas en la pantalla de acuerdo al estado desplegado/contraído de los nodos jerárquicos. Esto no significa, sin embargo que el número de líneas de los arrays varíe. Sólo se modifica la visualización, no los datos.

Es importante entender este principio porque la gestión programada de list box jerárquicos se basa siempre en los datos de los arrays, no en los datos mostrados. En particular, las líneas de ruptura añadidas automáticamente no se tienen en cuenta en los arrays de opciones de visualización (consulte la sección "Gestión de líneas de ruptura").

Echemos un vistazo por ejemplo a los siguientes arrays:

Si estos arrays están representados jerárquicamente, la línea "Quimper" no se mostrará en la segunda línea, sino en la cuarta, debido a las dos líneas de ruptura añadidas:

Independientemente de cómo los datos se muestran en el list box (jerárquicamente o no), si quiere cambiar la línea que contiene "Quimper" a negrita, debe utilizar la instrucción Style{2} = bold. Sólo se tiene en cuenta la posición de la línea en los arrays.

Este principio se aplica para los arrays internos que se pueden utilizar para administrar:

  • colores
  • colores de fondo
  • estilos
  • líneas ocultas
  • selecciones

Por ejemplo, si desea seleccionar la fila que contiene Rennes, debe pasar:

 ->MiListbox{3}:=True

Representación no-jerárquica:

Representación jerárquica:

Nota: si una o más líneas se ocultan porque sus padres están contraídos, no se seleccionan más. Sólo las líneas que son visibles (ya sea directamente o por desplazamiento) pueden seleccionarse. En otras palabras, las líneas no pueden estar a la vez ocultas y seleccionadas.

Al igual que con las selecciones, el comando LISTBOX GET CELL POSITION devuelve los mismos valores para un list box jerárquico y un list box no jerárquico. Esto significa que en los dos ejemplos a continuación, LISTBOX GET CELL POSITION devolverá la misma posición: (3;2).

Representación no-jerárquica:

Representación jerárquica:

Si el usuario selecciona una línea de ruptura, LISTBOX GET CELL POSITION devuelve la primera ocurrencia de la línea en el array correspondiente. En el siguiente caso: 

... LISTBOX GET CELL POSITION devuelve (2;4). Para seleccionar una línea de ruptura por programación, debe utilizar el comando LISTBOX SELECT BREAK.

Las líneas de ruptura no se tienen en cuenta en los arrays internos utilizados para administrar la apariencia gráfica de los list box (estilos y colores). Sin embargo es posible modificar estas características para las líneas de ruptura vía los comandos de gestión gráfica para objetos (tema ). Sólo debe ejecutar los comandos apropiados en los arrays que constituyen la jerarquía. 

Dado por ejemplo el siguiente list box (los nombres de los arrays asociados se especifican entre paréntesis): 

Representación no-jerárquica:

Representación jerárquica:

En modo jerárquico, los niveles de ruptura no son tenidos en cuenta por los arrayas de modificación de estilo llamados tStyle y tColors. Para modificar el color o el estilo de los niveles de ruptura, debe ejecutar las siguientes instrucciones:

 OBJECT SET RGB COLORS(T1;0x0000FF;0xB0B0B0)
 OBJECT SET FONT STYLE(T2;Bold)

Nota: en este contexto, sólo la sintaxis que utiliza la variable array puede funcionar con los comandos de propiedad de objeto porque los arrays no tienen objeto asociado. 

Resultado:

Cuando todas las líneas de una subjerarquía están ocultas, la línea de ruptura se oculta automáticamente. En el ejemplo anterior, si las líneas 1 a 3 están ocultas, la línea de ruptura "Brittany" no aparecerá.

 
PROPIEDADES 

Producto: 4D
Tema: List Box

 
VER TAMBIÉN 

Gestión de los objetos de tipo List box
LISTBOX GET HIERARCHY
LISTBOX SELECT BREAK
LISTBOX SET HIERARCHY