Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
06 visual basic .net - exercice sur les collections
1. LES COLLECTIONS – EXERCICE
EXPLOITER DES OBJETS DANS LA COLLECTION CONTROLS
SCÉNARIO
Dans les exercices à venir, vous allez utiliser du code pour manipuler des objets sur un
formulaire en utilisant la collection Controls. Votre projet possèdera trois objets boutons.
Vous allez créer des procédures événementielles qui modifient les propriétés Text de
chaque objet, déplacer des objets vers la droite et accorder un traitement spécial à un objet
du groupe. Le programme exploitera trois boucles For Each...Next pour manipuler les
objets chaque fois que l’utilisateur cliquera sur un des boutons.
UTILISER UNE BOUCLE FOR EACH...NEXT POUR MODIFIER DES PROPRIETES TEXT
1. Créez un nouveau projet Visual Basic Application Windows Forms intitulé Ma
Collection Controls.
2. Utilisez le contrôle Button pour dessiner trois objets bouton à gauche du formulaire
Form1, puis élargissez-les à environ 124 pixels, comme suit :
3. Utilisez la fenêtre Propriétés pour définir la propriété Name du troisième objet
bouton (Button3) à « btnMoveObjects ».
4. Dans le formulaire, double-cliquez sur le premier objet bouton (Button1). La
procédure événementielle Button1_Click s’affiche dans l’Éditeur de code.
2. 5. Tapez les instructions suivantes :
For Each ctrl In Controls
ctrl.Text = "Cliquez sur moi !"
Next
Cette boucle For Each...Next parcourt la collection Controls contrôle par
contrôle et définit la propriété Text de chaque contrôle à « Cliquez sur moi ! ».
La boucle utilise ctrl comme variable d’objet dans la boucle, que vous déclarerez à
l’étape suivante.
6. Défilez vers le haut du code et tapez le commentaire et la déclaration de variable
suivante, juste en dessous de l’instruction Public Class Form1 :
'Déclare une variable de type Control pour représenter les contrôles
du formulaire
Dim ctrl As Control
Cette déclaration de variable globale crée une variable dans le type de la classe
Control qui représente les contrôles du formulaire en cours dans le programme. Vous
déclarez cette variable dans la zone des déclarations générales du formulaire afin
qu’elle soit valide dans toutes les procédures événementielles du formulaire.
Vous voilà prêt à exécuter le programme et à modifier la propriété Text de chaque
bouton du formulaire.
7. Dans la barre d’outils Standard, cliquez sur le bouton Démarrer le débogage.
8. Dans le formulaire, cliquez sur le premier bouton (Button1).
La procédure événementielle Button1_Click modifie la propriété Text de chaque
contrôle dans la collection Controls. Votre formulaire présente un résultat similaire
à:
3. 9. Cliquez sur le bouton Fermer du formulaire. Le programme s’interrompt.
Remarque
Les changements apportés à la propriété Text par le programme n’ont pas été répliqués dans le
formulaire au niveau du Concepteur. Les changements effectués à l’exécution n’affectent pas les
principaux paramètres de propriété du programme.
10. Dans la barre d’outils Standard, cliquez sur le bouton Enregistrer tout pour
enregistrer vos changements. Désignez un dossier de votre choix comme emplacement.
Vous voilà prêt à tester différemment la collection Controls. Vous allez utiliser la propriété
Left pour déplacer chaque contrôle de la collection Controls vers la droite.
UTILISER UNE BOUCLE FOR EACH...NEXT POUR DEPLACER DES CONTROLES
1. Affichez le formulaire, puis double-cliquez sur le deuxième objet bouton (Button2).
2. Tapez le code suivant dans la procédure événementielle Button2_Click :
For Each ctrl In Controls
ctrl.Left = ctrl.Left + 25
Next
Chaque fois que l’utilisateur clique sur le deuxième bouton, cette boucle For
Each...Next parcourt les objets de la collection Controls un à un et les déplace de
25 pixels vers la droite (pour déplacer des objets de 25 pixels vers la gauche, il suffit
de soustraire 25). Un pixel est une unité de mesure indépendante de tout
périphérique qui permet de positionner avec précision des objets sur un formulaire.
Astuce
Dans Visual Basic 6, on utilise normalement des twips et non des pixels comme unité de
mesure. Un twip est une unité typographique équivalente à un vingtième de point.
Comme dans la précédente procédure événementielle, la variable ctrl est une «
doublure » de l’objet en cours dans la collection, qui contient les mêmes paramètres
de propriété que l’objet qu’elle représente. Dans cette boucle, vous réglez la
propriété Left, qui détermine l’emplacement d’un objet par rapport au côté gauche
du formulaire.
3. Cliquez sur le bouton Démarrer le débogage. Le programme s’exécute et les trois
boutons s’affichent à gauche du formulaire.
4. Cliquez sur le deuxième bouton à plusieurs reprises.
Chaque fois que vous cliquez sur le bouton, les objets du formulaire se déplacent
progressivement vers la droite. Voici à quoi ressemble votre écran après cinq clics :
4. 5. Cliquez sur le bouton Fermer du formulaire pour arrêter le programme.
6. Cliquez sur le bouton Enregistrer tout pour enregistrer vos changements.
Il ne sera pas toujours indiqué de déplacer tous les objets d’un formulaire comme un
groupe. Avec Visual Basic, vous pouvez traiter individuellement les membres d’une
collection. Dans le prochain exercice, vous allez voir comment maintenir le troisième
objet bouton à sa place tout en déplaçant les deux autres boutons vers la droite.
EXPLOITER LA PROPRIETE NAME DANS UNE BOUCLE FOR EACH...NEXT
Pour traiter différemment un ou plusieurs membres d’une collection, utilisez la propriété
Name, qui identifie de manière unique chaque objet du formulaire. On peut également
l’utiliser par programmation pour identifier des objets spécifiques dans un programme.
Pour ce faire, choisissez les objets qui subiront un traitement spécial, puis notez leurs
propriétés Name. Lorsque par la suite, vous parcourrez les objets du formulaire en utilisant
une boucle For Each...Next, utilisez une ou plusieurs instructions If pour tester les
propriétés Name importantes et gérer ces objets différemment. Par exemple, supposons que
vous souhaitiez construire une boucle For Each...Next qui déplace un objet plus
lentement sur le formulaire que les autres objets. Utilisez une instruction If…Then pour
repérer la propriété Name de l’objet le plus lent, puis déplacez cet objet d’une distance plus
courte en incrémentant moins sa propriété Left que pour les autres objets.
Astuce
Pour accorder à plusieurs objets un traitement spécial dans une boucle For Each...Next, utilisez
des instructions ElseIf avec l’instruction If…Then ou servez-vous d’une structure de décision
Select Case.
Dans l’exercice suivant, vous allez tester la propriété Name du troisième objet bouton
(btnMoveObjects) pour accorder un traitement spécial à ce bouton dans une boucle For
5. Each...Next. Il en résultera une procédure événementielle qui déplacera les deux boutons
supérieurs vers la droite et maintiendra le bouton du bas à un emplacement fixe.
Astuce
Outre la propriété Name, la plupart des objets prennent en charge la propriété Tag. Au même titre
que la propriété Name, il s’agit d’un emplacement dans lequel vous pouvez stocker des données
chaîne à propos de l’objet. Par défaut, la propriété Tag est vide mais vous pouvez lui assigner des
informations et la tester pour identifier de manière unique les objets de votre programme que vous
souhaitez traiter différemment.
UTILISER LA PROPRIETE NAME POUR TRAITER UN OBJET DE LA COLLECTION CONTROLS
1. Affichez le formulaire et double-cliquez sur le troisième objet bouton.
La procédure événementielle btnMoveObjects_Click s’affiche dans l’Éditeur de
code. Souvenez-vous que, dans l’exercice précédent, vous avez modifié la propriété
Name de cet objet en remplaçant « Button1 » par « btnMoveObjects ».
2. Tapez le code suivant dans la procédure événementielle :
For Each ctrl In Controls
If ctrl.Name <> "btnMoveObjects" Then
ctrl.Left = ctrl.Left + 25
End If
Next
La nouvelle fonctionnalité de cette boucle For Each...Next est l’instruction
If…Then, qui vérifie si chaque membre de la collection possède une propriété Name
appelée « btnMoveObjects ». Si la boucle rencontre ce marqueur, elle passe l’objet
sans le déplacer. Notez que, comme dans les exemples précédents, la variable ctrl a
été déclarée en haut du formulaire en tant que variable de type Control avec une
portée sur l’ensemble du formulaire.
3. Cliquez sur le bouton Enregistrer tout pour enregistrer vos changements.
4. Cliquez sur le bouton Démarrer le débogage.
Le programme s’exécute et les trois objets bouton s’affichent sur le formulaire.
5. Cliquez trois ou quatre fois sur le troisième objet bouton.
Au fur et à mesure que vous cliquez, les deux objets du haut se déplacent sur l’écran.
Toutefois, le troisième bouton conserve sa place, comme ci-après :
6. 6. Cliquez sur le bouton Fermer du formulaire pour arrêter le programme.
Il peut s’avérer très utile d’accorder un traitement spécial à un objet d’une collection. Dans
ce cas, l’utilisation de la propriété Name dans la boucle For Each...Next a amélioré la
lisibilité du code, et suggère de nombreuses applications potentielles pour un programme de
jeu ou de traitement graphique. Lorsque vous utiliserez d’autres types de collections dans
Visual Basic, gardez bien à l’esprit cette propriété.