Présentation détaillée : partage d'un gestionnaire d'événements

Mise à jour : novembre 2007

Dans cette leçon, vous apprendrez comment créer un gestionnaire d'événements partagé, qui gère les événements de plusieurs contrôles.

Dans la leçon précédente, Création d'un programme interactif : création d'un gestionnaire d'événements, vous avez appris comment écrire le code qui réagit aux événements MouseEnter et MouseLeave pour un contrôle Button. Que se passe-t-il cependant en présence de plusieurs contrôles Button et si vous souhaitez afficher le même message pour chacun d'eux ? Vous pourriez écrire un code dans le gestionnaire d'événements de chaque contrôle. Heureusement, il y a une méthode plus simple.

Si vous examinez attentivement les méthodes du gestionnaire de l'événement MouseEnter, vous remarquez que la déclaration Method (Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter) contient une clause Handles (Handles Button1.MouseEnter). Il n'est pas étonnant de constater que le mot clé Handles spécifie au gestionnaire d'événements les événements qu'il doit gérer.

Pour partager un gestionnaire d'événements entre plusieurs contrôles, vous devez simplement ajouter les noms des contrôles supplémentaires et le nom de l'événement que vous souhaitez gérer. Le gestionnaire d'événements est alors notifié lorsque l'événement se produit pour un de ces contrôles. Par exemple, si vous disposez de deux contrôles Button, et si vous souhaitez utiliser le même gestionnaire d'événements pour les deux, la clause Handles ressemblera à ce qui suit :

Handles Button1.MouseEnter, Button2.MouseEnter.

Vous disposez à présent d'une seule méthode qui gère l'événement MouseEnter pour les deux contrôles. Mais comment fait le gestionnaire d'événements pour savoir quel contrôle a déclenché cet événement ? Si vous examinez à nouveau la déclaration Method, vous remarquez la clause ByVal sender As Object : le mot clé Sender informe le gestionnaire d'événements de l'identité de l'objet (dans le cas présent, du contrôle) qui a déclenché l'événement.

Essayez !

Pour partager un gestionnaire d'événements

  1. Ouvrez le projet EventHandler que vous avez créé dans la leçon précédente. Si vous ne l'aviez pas enregistré, vous devez d'abord revenir à la leçon précédente, Création d'un programme interactif : création d'un gestionnaire d'événements, et réaliser les procédures qui s'y trouvent.

  2. Dans l'Explorateur de solutions, sélectionnez Form1.vb, puis dans le menu Affichage, choisissez Concepteur.

  3. À partir de la Boîte à outils, faites glisser un autre contrôle Button dans le formulaire.

  4. Dans la fenêtre Propriétés, affectez à la propriété AutoSize la valeur True.

  5. Dans le menu Affichage, choisissez Code pour ouvrir l'éditeur de code.

  6. Dans la déclaration de la méthode Button1_MouseEnter (Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter), changez la clause Handles en Handles Button1.MouseEnter, Button2.MouseEnter.

  7. Dans le corps de la déclaration d'événement, remplacez le code existant par le code suivant :

    If sender.Equals(Button1) Then
      Button1.Text = "The mouse has entered Button1"
    Else
      Button2.Text = "The mouse has entered Button2"
    End If
    

    Ce code vérifie que l'expéditeur était bien Button1. Dans l'affirmative, la propriété Text de Button1 est mise à jour ; dans la négative, la propriété Text de Button2 est mise à jour.

  8. Dans la déclaration de la méthode Button1_MouseLeave, changez la clause Handles en ce qui suit.

    Handles Button1.MouseLeave, Button2.MouseLeave.

  9. Dans le corps de la déclaration d'événement, remplacez le code existant par le code suivant :

    sender.Text = "The mouse has left"
    

    Dans ce cas, le code affecte la même chaîne à la propriété Text de l'expéditeur (Button1 ou Button2).

  10. Appuyez sur F5 pour exécuter l'application.

    Désormais, lorsque le pointeur de souris passe sur le bouton, le texte devient The mouse has entered avec le nom du bouton. Lorsque le pointeur quitte le bouton, le texte redevient The mouse has left.

    Essayez d'ajouter d'autres contrôles au formulaire et de modifier les clauses Handles pour les inclure ; il n'est même pas nécessaire qu'il s'agisse du même genre de contrôles.

Étapes suivantes

Dans cette leçon, vous avez appris comment partager un seul gestionnaire d'événements entre plusieurs contrôles. Dans la leçon suivante, vous apprendrez comment utiliser deux nouveaux types de contrôles, les contrôles CheckBox et RadioButton, pour présenter des choix aux utilisateurs.

Leçon suivante : Obtention des choix de l'utilisateur : utilisation des cases à cocher et des cases d'option

Voir aussi

Tâches

Création d'un programme interactif : création d'un gestionnaire d'événements