logo UsualSoft   Skip Navigation Links
Accueil
Références
Formations
TutorielsExpand Tutoriels
Liens téléchargements

Contact : usualsoft@outlook.fr
Microsoft Certified Professional
Cours : Visual-Basic

Le formulaire : classe Form

Claude Gruchet

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)  :