La manipulation des formulaires sous Visual Basic nécessite une bonne connaissance
de ses évènements.
Ces notions seront utilisées tout au long des cours suivants. C'est pourquoi,
à la fin de cette page, vous trouverez un lien vers le premier TD de ce
cours. La vertu de la pratique n'est plus à prouver pour ce qui est d'acquérir
des connaissances informatiques !
Ne vous inquiétez donc pas si vous débutez et que certaines
notions vous paraissent quelque peu compliquées. Tout prendra sa signification
avec la pratique, les TDs sont là pour ça !
Les scénarios ci après présentent l'enchaînement des évènements d'une feuille, leur signification et leur usage.
Affichage d’un formulaire qui n’a encore pas été exploité
Le terme
formulaire
non exploité signifie :
-
Aucune variable publique déclarée dans cette feuille n'a déjà été sollicitée par une procédure extérieure. (voir
à ce sujet la leçon Variables et constantes)
-
Aucune propriété de la feuille ou de ses contrôles n'a été sollicitée par une procédure extérieure.
-
La feuille n'a jamais été affichée.
Lorsque ce formulaire est affiché suite à une instruction "NomFeuille.show",
les évènements suivants se produisent :
| Événement |
Signification |
| Form_Initialize |
les variables publiques et privées déclarées dans la feuille sont chargées en mémoire.
Lorsque cela est possible, profitez de cet évènement pour attribuer des valeurs à vos variables dès leur création.
|
| Form_Load |
les propriétés de la feuille et de ses contrôles
sont chargées en mémoire. Profitez en pour paramétrer dynamiquement
des objets avant leur affichage. Attention, la feuille n'est pas encore
présente à l'écran. Si vous utilisez cet évènement pour coder des
méthodes graphiques comme .line, .circle, etc..., aucune erreur ne se
produira mais les méthodes n'auront pas d'effet.
|
| Form_Resize |
la fenêtre est redimensionnée. La fenêtre n'est cependant pas encore visible.
Profitez en pour attribuez une dimension précise à la fenêtre.
|
| Form_Paint |
se produit lors du rafraîchissement du contenu graphique de la fenêtre.
Elle est visible à l'écran. Codez des méthodes graphiques.
|
| Form_Activate |
la fenêtre affichée devient active.
Attention cet argument se produit à chaque activation de la fenêtre
(par exemple après l'utilisation d'une boite de dialogue apparue sur le
formulaire) et pas uniquement au premier appel
|
Masquage d’une feuille présente à l’écran
Si la feuille est affichée, ses variables et propriétés sont en mémoire. Masquer
une feuille par l'emploi de sa méthode .hide entraîne l'évènement :
| Événement |
Signification |
| Form_DeActivate |
Le formulaire n'est plus actif (autre cas
: une autre fenêtre a été appelée par l'utilisateur ou une boite de
dialogue est apparue sur le formulaire). Variables et propriétés sont toujours en mémoire.
|
Déchargement d’une feuille avec l’instruction Unload :
Unload Me ou Unload frmTest entraîne deux évènements
(qui sont aussi déclenchés si l'utilisateur utilise la croix de fermeture de
la fenêtre ou la touche F4 pour fermer l'application. Autre possibilité : la
fermeture de Windows !) :
| Événement |
Signification |
| Form_QueryUnload(Cancel As
Integer, UnloadMode As Integer) |
Signale que le déchargement a été demandé. Il permet grâce à l'argument
UnloadMode de savoir
quelle est l'origine du déchargement (Windows, Feuille mère MDI, Instruction
Unload, Utilisation des cases "système").
L'argument Cancel fonctionne comme un booléen. En plaçant sa valeur sur True
dans la procédure évènementielle, le déchargement de la feuille est annulé.
|
| Form_Unload (Cancel As
Integer) |
Sans annulation, l'évènement Unload signifie le
déchargement du formulaire.
Le déchargement de la feuille peut être annulé par l'emploi de l'argument
Cancel (Cancel=True).
|
Destruction de l’instance d’une feuille :
Pour obtenir une destruction définitive de toute référence à une feuille, employez la syntaxe
"Set NomFeuille = Nothing".
L'évènement obtenu est :
| Événement |
Signification |
| Form_Terminate |
Les variables
déclarées dans la feuille sont détruites. A utiliser pour éventuellement archiver des valeurs.
|
Manipulation d’une variable d’une feuille non exploitée :
Si une procédure accède en consultation ou modification à une variable déclarée dans une feuille
qui n'a encore jamais été exploitée d'une quelconque manière que ce soit, l'évènement
suivant se produit :
|
Événement
|
Signification
|
|
Form_Initialize
|
toutes les déclarations de la feuille sont réalisées.
|
Manipulation d’une propriété d’une feuille non exploitée :
Si une procédure accède en consultation ou modification à une
propriété d'une feuille ou de ses contrôles qui n'a encore jamais été
exploitée d'une quelconque manière que ce soit, les évènements suivants
se produiront :
| Événement |
Signification |
|
Form_Initialize
|
Les variables de la feuille sont chargées
|
|
Form_Load
|
puis les propriétés et les contrôles
|
Il n'est donc pas nécessaire q'une feuille soit chargée au
préalable par
l'instruction Load pour pouvoir utiliser ses variables ou propriétés depuis
une procédure extérieure (puisque l'utilisation d'une propriété va
déclencher le Load !)
Taille du formulaire et position des contrôles
N’oubliez pas que si vous voulez laisser à l’utilisateur la possibilité de
redimensionner
(est-ce bien utile ?) le formulaire, il vous faudra gérer l’événement
Resize pour repositionner vos contrôles
relativement à la nouvelle taille (propriétés Scalewidth et Scaleheight
du formulaire et propriétés Top, Left, width, height
des contrôles).
|
Pour éviter d’avoir à gérer cet événement, il suffit de
déclarer la propriété BorderStyle
du formulaire comme " Fixed dialog ".
|
Les fenêtres modales ou boîtes de dialogue :
La méthode Show d’un objet Form comporte un argument qui peut avoir deux valeurs :
vbDefault ou vbModal. Si le paramètre est omis c’est la valeur par défaut vbDefault (0)
qui est appliquée.
Exemple : MonForm.Show vbModal
Si on utilise le paramètre vbModal, le formulaire est ouvert en tant que fenêtre
modale, on parle aussi de boite de dialogue. Il est intéressant de connaître cette possibilité tant
elle facilite la vie du développeur en canalisant les actions de l’utilisateur dans l’IHM.
Lorsqu’un formulaire est ouvert en boite de dialogue, tous les autres formulaires sont
désactivés en attendant sa fermeture. En plus, le code de l’appelant est
stoppé
durant toute la durée de vie de la boite de dialogue.
|
Non modal
|
MonForm.Show
MsgBox " Après show "
|
Le formulaire est affiché et tous les autres restent accessibles
Le message apparaît aussitôt le formulaire affiché.
|
|
Modal
|
MonForm.Show vbModal
MsgBox " Après show "
|
Le formulaire est affiché en tant que boite de dialogue, tous les autres formulaires sont temporairement désactivés, l’utilisateur est obligé de finir la tâche pour laquelle il a appelé le formulaire avant d’entreprendre autre chose.
Le message n’apparaît pas à l’ouverture du formulaire (le code de l’appelant est suspendu) mais
seulement quand l’utilisateur referme le formulaire appelé (ce qui relance l’exécution du code appelant).
|
 |
Une fenêtre modale est toujours " au-dessus " des autres formulaires. Si elle doit ouvrir
d’autres formulaires, il devront, eux aussi, être affichés avec l’argument
vbModal. Si un formulaire affiché
en modal tente d’ouvrir un formulaire en mode " normal ", une erreur d’exécution se produit.
|
Travaux dirigés
Essayons nous à une mise en oeuvre simple d'un formulaire (menu) qui en appelle un autre (calculatrice) :