logo Pierre AULAS
Visual Basic - Groupe de contrôles
 Parcours  |   Réalisations  |   Cours  |   Chroniques  |   Divers
Création de l'interface graphique
Définition des propriétés
Ecrire le code du programme

Groupe de contrôles

Cet exercice n'a pas d'application concrète immédiate mais doit vous permettre de maîtriser la notion de groupe de contrôles et d'apprendre à créer des contrôles via Visual Basic.

Cette image vous montre l'aspect de votre application une fois terminée. Vous pouvez également tester son fonctionnement ici.
Trois boutons de commandes sont situés à droite de l'écran (ils forment un groupe de contrôle mais cela l'utilisateur ne le sait pas). Il faut laisser à gauche la place pour que des zones de texte puissent apparaître.
Le bouton + permet à l'utilisateur de créer dynamiquement une nouvelle zone de texte (située en dessous de la précédente si il y en a déjà). Si il appuie de manière répétée sur cette touche, il peut créer au total 8 zones de texte comme le montre la capture ci-dessous:

Le bouton - permet à l'utilisateur de supprimer dynamiquement ces zones de texte.
Le bouton Quitter permet à l'utilisateur de quitter l'application.
Notez que dans la première image le bouton " - " n'est pas disponible (puisqu'il n'y a qu'une zone de texte) et que dans la seconde image c'est le bouton " + " qui n'est pas disponible (puisque le formulaire est rempli de zone de texte, inutile de laisser à l'utilisateur la possibilité d'en ajouter encore).

Les étapes de programmation

Comme toujours, vous essayerez de travailler en trois temps  :

1. Création de l'interface graphique

Cet exercice comprend 3 contrôles boutons de commande et rien d'autre (en tout cas au départ).

Placez-les proprement sur le formulaire et verrouillez-les ensuite  :

Haut de page

2. Définition des propriétés

Définissez maintenant les propriétés des 3 contrôles présents sur votre formulaire  :

Objet  Propriété  Valeur
Form1  Name  frm01
 Text  Exercice - Groupe de contrôles
Button1  Name  cmdPlus
 Text  (vide)
 Enabled  True
 Image  imgPlus.ico
Button2  Name  cmdMoins
 Text  (vide)
 Enabled  False
 Image  imgMoins.ico
Button3  Name  cmdQuitter
 Text  &Quitter

Les boutons de commande plus et moins utilisent les images suivantes (faites un clic droit Enregistrer l'image sous pour les récupérer)  :

La propriété Enabled permet de rendre ou non un bouton de commande disponible pour l'utilisateur. Dans le cas de notre application, il est inutile de permettre à l'utilisateur de cliquer sur le bouton " - " tant qu'il n'y a qu'aucune zone de texte à supprimer. C'est pourquoi cette propriété est définie à False au démarrage de l'application.
Nous verrons dans la partie programmation comment manipuler cette propriété via le code le moment venu.

Si vous lancez l'exécution de votre projet (touche F5 ou menu Exécution > Exécuter) maintenant, votre formulaire, devrait ressembler à cela  :

Pour l'instant il ne réagit pas aux sollications de l'utilisateur. Passons maintenant à la partie programmation.

Haut de page

3. Ecrire le code du programme

Là ça se corse. Si vous avez des difficultés, il est peut-être nécessaire de jeter à nouveau un coup d'œil sur le cours.

Sinon vous devez savoir qu'on peut créer un contrôle via le code de la manière suivante  :

'Je peux créer une variable contrôle
Dim x As New TextBox
'Je peux définir pour cette variable toutes les propriétés et méthodes disponibles pour ledit contrôle
x.Left = 50
x.Top = 95
x.Height = 20
x.Width = 220
x.Text = "Je suis la zone de texte 1"
x.Visible = True
'Je peux associer à ma variable contrôle des événements qui renvoient vers des procédures selon la syntaxe suivante:
AddHandler x.MouseDown, AddressOf clicTexte
'Enfin mon contrôle ne prend vie que lorsque je l'ajoute à la liste des contrôles de mon formulaire
Controls.Add(x)

Pour me faciliter le travail, je peux placer tous les contrôles nouvellement créés dans une même collection selon la syntaxe suivante  :

Dim Ensemble As New Collection 'Je créé une fois pour toute ma collection
'C'est cette collection qui va accueillir les contrôles 'zone de texte' créés dynamiquement

'Je l'ajoute à ma collection
Ensemble.Add(x)

Pour supprimer un contrôle via le code, on utilise la syntaxe suivante  :

nomdemoncontrole.Dispose()

ou dans le cas d'un contrôle appartenant à une collection  :

Ensemble(index).Dispose()
'ou index correspond au numéro du contrôle dans la collection Ensemble


Avant de vous jeter dans la programmaton, essayez de trouver par vous même l'algorithme à mettre en oeuvre (commencez par travailler sur une feuille de papier). Si cela vous paraît trop difficile, voici un algorithme possible (ce n'est pas le seul).
Il ne vous reste plus qu'à le traduire en Visual Basic.

Au démarrage de mon application
  je déclare une collection
  je déclare monIndex comme un entier
  monIndex vaut 0

Lorsque je clique sur le bouton quitter
  Je quitte l'application

Lorsque je clique sur le bouton Plus
  je créé une variable zone de texte
  je la place, la nomme en fonction de monIndex
  j'ajoute cette variable zone de texte à ma collection puis aux contrôles du formulaire
  j'incrémente monIndex de 1

Lorsque je clique sur le bouton Moins
  je supprime la zone de texte d'index monIndex
  je décrémente monIndex de 1

En l'état l'algorithme est un peu léger puisqu'il ne limite pas le nombre d'ajouts ou de suppressions. Mais il suffit pour démarrer.

Haut de page

Pour limiter les ajouts et les suppressions, il faut jouer avec la propriété Enabled des contrôles Zone de texte de la manière suivante  :

cmdMoins.Enabled = True

La dernière étape consiste à ajouter sur les contrôles zone de texte un événement Click qui se déclenche lorsque l'utilisateur clique sur une des zones de texte et qui affiche une MessageBox indiquant "vous avez cliqué sur le contrôle baptisé: txtMaZone1" par exemple.

Pour cela vous devez vous rappeler que la syntaxe pour associer à un contrôle un événement qui appelle une procédure, il faut écrire  :

'Je peux associer à ma variable contrôle des événements qui renvoient vers des procédures selon la syntaxe suivante  :
AddHandler x.MouseDown, AddressOf clicTexte

Charge à vous ensuite d'écrire au sein de la procédure clicTexte ce que vous voulez voir se produire lorsque l'utilisateur clique sur une de vos zone de texte.

Private Sub clicTexte(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
  ...
End Sub

Sachant que sender désigne ici l'objet qui a appelé votre procédure. Vous pouvez donc accéder aux propriétés du contrôle appelant comme par exemple  : sender.name.

Les sources de cet exercice sont disponibles ici en faisant un clic droit "Enregistrer la cible de ce lien".

Haut de page
Plan du site  |  Mentions légales  |  Crédits  |  Aide