4D v12.4

Gestion des List box hiérarchiques

Accueil

 
4D v12.4
Gestion des List box hiérarchiques

 

Gestion des List box hiérarchiques  


 

 

4D v12 vous permet de définir et d’utiliser des list box hiérarchiques. Une list box hiérarchique est une list box dans laquelle le contenu de la première colonne apparaît sous forme hiérarchique. Ce type de représentation est adapté à la présentation d’informations comportant des valeurs répétées et/ou hiérarchiquement dépendantes (pays/région/ville...).

Seules les list box de type tableau peuvent être hiérarchiques. 

Les list box hiérarchiques constituent un mode de représentation particulier des données, mais ne modifient pas la structure de ces données (les tableaux). Les list box hiérarchiques sont remplies et gérées exactement de la même manière que les list box non hiérarchiques (cf. Gestion programmée des objets de type List box).

Pour définir une list box hiérarchique, vous disposez des possibilités suivantes :

  • configurer manuellement les éléments hiérarchiques via la Liste des propriétés ou à l’aide du pop up menu de gestion des list box, dans l’éditeur de formulaires. Ces points sont traités dans le manuel Mode Développement de 4D.
  • utiliser les commandes LISTBOX FIXER HIERARCHIE et LISTBOX LIRE HIERARCHIE.

A la première ouverture d’un formulaire contenant une list box hiérarchique, par défaut toutes les lignes sont déployées.
Une ligne de rupture et un "noeud" hiérarchique sont automatiquement ajoutés dans la list box lorsque des valeurs sont répétées dans les tableaux. Par exemple, imaginons une list box contenant quatre tableaux définissant des villes, chaque ville étant caractérisée par un pays, une région, un nom et un nombre d’habitants :

Si cette list box est affichée sous forme hiérarchique (les trois premiers tableaux étant inclus dans la hiérarchie), vous obtenez :

Les tableaux ne sont pas triés avant la construction de la hiérarchie. Si par exemple un tableau contient les données AAABBAACC, la hiérarchie obtenue sera :

> A
> B
> A
> C

Pour déployer ou contracter un "noeud" hiérarchique, cliquez dessus. Si vous effectuez Alt+clic (Windows) ou Option+clic (Mac OS) sur le noeud, tous ses sous-éléments seront déployés ou contractés. Ces opérations peuvent également être effectuées par programmation à l'aide des commandes LISTBOX DEPLOYER et LISTBOX CONTRACTER.

Une list box hiérarchique affiche un nombre variable de lignes à l’écran en fonction de l’état déployé/contracté des noeuds hiérachiques. Cela ne signifie pas pour autant que le nombre de lignes des tableaux varie. Seul l’affichage est modifié, pas les données.

Il est important de comprendre ce principe car la gestion programmée des list box hiérarchiques se base toujours sur les données des tableaux, pas sur les données affichées. En particulier, les lignes de rupture ajoutées automatiquement ne sont pas prises en compte dans les tableaux d’options d’affichage (cf. ci-dessous le paragraphe Gestion des lignes de rupture).

Examinons par exemple les tableaux suivants :

Si ces tableaux sont représentés hiérarchiquement, la ligne "Quimper" ne sera pas affichée sur la deuxième ligne mais sur la quatrième, à cause des deux lignes de rupture ajoutées :

Quelle que soit la manière dont les données sont affichées dans la list box (hiérarchique ou non-hiérarchique), si vous souhaitez passer la ligne contenant "Quimper" en gras, vous devrez utiliser l’instruction TabStyle{2} = Gras. Seule la position de la ligne dans les tableaux est prise en compte. 

Ce principe est mis en oeuvre pour les tableaux internes permettant de gérer :

  • les couleurs
  • les couleurs de fond
  • les styles
  • les lignes masquées
  • les sélections

Par exemple, si vous voulez sélectionner la ligne contenant Rennes, vous devez passer :

 ->MaListbox{3}:=Vrai

Représentation non hiérarchique :

Représentation hiérarchique :

Note : Si une ou plusieurs lignes sont masquées du fait que leurs parents ont été contractés, elles ne sont plus sélectionnées. Seules les lignes visibles (directement ou suite à un défilement) sont sélectionnables. Autrement dit, les lignes ne peuvent pas être à la fois sélectionnées et cachées. 

Tout comme pour les sélections, la commande LISTBOX LIRE POSITION CELLULE retournera les mêmes valeurs pour une list box hiérarchique et une list box non hiérarchique. Cela signifie que dans les deux exemples ci-dessous, LISTBOX LIRE POSITION CELLULE retournera la même position : (3;2)

Représentation non hiérarchique :

Représentation hiérarchique :

Si l’utilisateur sélectionne une ligne de rupture, LISTBOX LIRE POSITION CELLULE retourne la première occurrence de la ligne dans le tableau correspondant. Dans le cas suivant : 

... LISTBOX LIRE POSITION CELLULE retourne (2;4). Pour sélectionner une ligne de rupture par programmation, vous devez utiliser la commande LISTBOX SELECTIONNER RUPTURE.

Les lignes de rupture ne sont pas prises en compte dans les tableaux internes permettant de gérer l’apparence graphique des list box (styles et couleurs). Il est toutefois possible de modifier ces caractéristiques pour les lignes de rupture via les commandes de gestion graphique des objets (thème ). Il suffit pour cela d’exécuter ces commandes appropriées sur les tableaux constituant la hiérarchie. 

Soit par exemple la list box suivante (les noms des tableaux associés sont précisés entre parenthèses) : 

Représentation non hiérarchique :

Représentation hiérarchique :

En mode hiérarchique, les niveaux de rupture ne sont pas pris en compte par les tableaux de modification de style nommés tStyle et tCouleurs. Pour modifier la couleur ou le style des niveaux de rupture, vous devez exécuter les instructions suivantes :

Note : Dans ce contexte, seule la syntaxe utilisant la variable tableau peut fonctionner avec les commandes de propriété d’objet car les tableaux n’ont alors pas d’objet associé. 

Résultat :

Lorsque toutes les lignes d’une sous-hiérarchie sont masquées, la ligne de rupture est automatiquement masquée. Dans l’exemple ci-dessus, si les lignes 1 à 3 sont masquées, la ligne de rupture "Bretagne" n’apparaîtra pas.

 
PROPRIÉTÉS 

Produit : 4D
Thème : List Box
Nom intl. : Managing Hierarchical List Boxes

 
VOIR AUSSI  

Gestion programmée des objets de type List box
LISTBOX FIXER HIERARCHIE
LISTBOX LIRE HIERARCHIE
LISTBOX SELECTIONNER RUPTURE