Utilité des fenêtres internes
La mise en oeuvre des fenêtres internes peut grandement simplifier le travail du développeur.
En effet combien de fois a t'on créé les mêmes champs avec le même code dans plusieurs fenêtres différentes ? Je pense notamment aux critères de sélections pour des résultats ou des traitements divers : états, graphes, consultations, etc...
Je vais illuster cet article avec une fourchette de sélection sur un fichier articles, avec une borne de début et une borne de fin sur le libellé trié par ordre croissant.
Utilisation "traditionnelle" de champs dans la fenêtre :
Dans la fenêtre on pose les 2 combobox puis un cadre pour faire joli :
Code du bouton "Editer" :
Dans le code on fait les contrôles de validité des informations saisies et on lance l'édition si c'est correct. Dans cet exemple on vérifie juste que les bornes sélectionnées dans les combobox sont cohérentes.
Ce genre de sélection peut se retrouver à différents endroits dans une application, ce qui signifie que l'on dupliquera ces champs et ce bout de code autant de fois qu'il y'aura d'occurence. Il y a une autre solution qui consisterait à mettre le bout de code de contrôle dans une procédure globale, ce qui serait déjà plus élégant comme solution ... mais il faudra tout de même dupliquer les champs dans chaque fenêtre.
Le même exemple avec utilisation d'une fenêtre interne :
On va donc créer une fenêtre interne avec ces champs : FI_SelectionArticles
Puis on va créer un champ fenêtre interne dans la fenêtre d'édition. Ce champ fenêtre interne aura comme fênêtre interne FI_SelectionArticles.
NOTE : bien faire la différence entre une fenêtre interne et un champ fenêtre interne.
Lorsqu'on exécute la fenêtre ListeArticle ça revient exactement au même ... sauf que :
Le code de vérification des bornes et les transmissions de paramètres à l'état ne fonctionnent plus.
On va donc mettre du code dans la fenêtre interne :
L'avantage de cette manière de faire est que TOUT est dans la fenêtre interne. Les fenêtres utilisatrices de cette fenêtre interne lui demandent des services : "Peux tu me dire si tes bornes sont correctes ?" ou bien "Peux tu stp me retourner ta borne de début ?" (le stp étant probablement facultatif)
Voilà ce que ça donne au niveau du code du bouton "Editer" :
NOTE : dans la fenêtre appelante on référence la fenêtre interne par son nom de champ fenêtre interne, dans ce cas : SAI_FI_SelectionArticle
NOTE : il est bien entendu possible d'avoir N champs fenêtres internes dans une même fenêtre, ce qui permet de faire un assemblage sur mesure selon les cas.