[WD17] Lister les champs d’une fenêtre/d’un onglet

Vincent Lecomte

Dans votre code, il vous sera possible de lister, ou plutôt d’énumérer, des champs d’une fenêtre, d’une page (pour Webdev) ou bien d’une fenêtre. Cette astuce peut se révéler utile lorsque vous devez par exemple augmenter la police des libellés ou pour modifier une ou plusieurs propriétés en une seule fonction.

Deux exemples vont être détaillés: le premier permet d’augmenter les caractères de tous les champs de la fenêtre s’ils commencent par “LIB_Libelle”. Le second quant à lui énumère les champs contenus dans un onglet, de deux manières différentes.

Énumérer les champs de la fenêtre

Le code a été écrit dans une procédure qui ne renverra rien.

On déclare deux variables, la première servira d’indice pour indiquer quel champ on veut récupérer, la seconde – une chaine de caractères – permettra d’enregistrer le nom du champ récupéré. On appelle donc une première fois la fonction EnumèreChamp() qui reçoit deux paramètres en entrée : le nom interne de la fenêtre, et l’indice du champ que l’on souhaite récupérer.

On effectue ensuite une boucle qui s’arrêtera dès que la fonction renverra une chaine vide. Les indirections permettent d’affecter des propriétés à chaque champ alors qu’on réutilise la même variable chaine.

Petit rappel : “les opérateurs { et } permettent d’accéder à un champ, une variable, un membre d’une classe ou une rubrique de fichier en construisant dynamiquement le nom du champ, de la variable, du membre de la classe ou de la rubrique.” Voir les “opérateurs d’indirections”.

Énumérer les champs d’un onglet

Deux syntaxes vous sont proposées : la première, très simple, profite de l’existence de la propriété “Occurrence” sur le champ de type Onglet, qui permet de connaitre directement le nombre de volets qu’il comporte.

La seconde en revanche, utilise plusieurs fois la fonction EnumèreSousElement() dans deux boucles “While”. Pour aller plus loin, vous pouvez même tester les performances des deux techniques pour voir l’écart qui existe. Il devrait être relativement minime.

On déclare une seule variable, “sChpOng” qui contiendra le nom du champ présent dans l’onglet. On crée une boucle allant de 1 au nombre de volets existants (propriété Occurrence). Notez qu’on utilise l’indirection avec le paramètre en entrée “InMonChamp” qui contient : <Nom de la fenêtre>.<Nom du champ>.

Ensuite, pour chaque volet, on va utiliser la fonction EnumèreSousElément() qui reçoit deux paramètres en entrée : le nom du champ complet ainsi que l’indice du volet dans le format suivant : <Nom de la fenêtre>.<Nom du champ>.<Indice volet>. On effectue ensuite le même genre de boucle que tout à l’heure, mais un seul paramètre sera passé à la fonction par la suite.

Cette syntaxe supplémentaire va plus loin dans l’utilisation de la fonction “EnumèreSousElément” puisqu’au départ, on souhaite énumérer les volets contenus dans l’onglet. La constante “enumPremier” indique qu’on initialise l’énumération, tandis que “enumVolet” indique que l’on veut récupérer l’indice des volets.

Dans la première boucle, vers la fin, on n’indique plus qu’une seule des deux constantes (voir ci-dessus). La seconde boucle quant à elle, est identique à celle présentée dans la syntaxe la plus simple (“sResChamp” contient alors ici un nombre et pas un nom de champ).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Copy link