Remplacement des gestionnaires d'événements avec Visual Basic .NET
Matthew A. Stoecker
L'équipe Visual Studio
Microsoft Corporation
Résumé : cet article explique comment remplacer les gestionnaires d'événements lorsque vous programmez en Visual Basic® .NET. L'utilisation de la clause Handles sera également abordée.
Sommaire
Introduction
Conditions requises
Gestionnaires d'événements
hérités
Gestionnaires d'événements
hérités dans les composants
Conclusion
Introduction
Lorsque vous héritez d'un contrôle ou d'un composant, vous créez un nouveau contrôle ou un nouveau composant qui regroupe toutes les fonctionnalités de sa classe de base. Tous les gestionnaires d'événements définis par la classe de base seront inclus dans le composant hérité. Cet article examine les questions relatives aux gestionnaires d'événements hérités ainsi que leurs implications dans le développement d'applications avec Visual Basic .NET.
Conditions requises
- Vous devez bien connaître la notion d'héritage
et la programmation orientée objet. Pour plus
d'informations, reportez-vous à l'article Polymorphism in Components
.
Gestionnaires d'événements hérités
Lorsqu'un composant est hérité, tous ses membres sont intégrés à la nouvelle classe. Les gestionnaires d'événements sont des méthodes exécutées en réponse à certains événements que le composant reçoit et elles sont héritées comme les autres membres du composant. L'exemple ci-après illustre un gestionnaire d'événements classique :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e as _
System.EventArgs) Handles Button1.Click
Static Counter as Integer = 0
Counter += 1
MessageBox.Show (" Un utilisateur a cliqué sur ce bouton " & _
Counter.ToString() & " fois.")
End Sub
La méthode ci-dessus est exécutée chaque fois
que l'événement Button1.Click est
déclenché. La clause Handles à la fin de
la déclaration de méthode associe la méthode
à l'événement. Cette structure est typique des
gestionnaires d'événements dans les composants.
Pour permettre le remplacement de cette méthode dans une classe héritée, vous devez ajouter le mot clé Overridable et modifier le niveau d'accès à Protected, Protected Friend ou Public. L'exemple ci-après illustre un gestionnaire d'événements qui peut être remplacé :
Protected Overridable Sub Button1_Click(ByVal sender As System.Object, _
ByVal e as System.EventArgs) Handles Button1.Click
Static Counter as Integer = 0
Counter += 1
MessageBox.Show (" Un utilisateur a cliqué sur ce bouton " & _
Counter.ToString() & " fois.")
End Sub
Gestionnaires d'événements hérités dans les composants
Le fait de remplacer un gestionnaire d'événements hérité équivaut à remplacer n'importe quelle autre méthode héritée, à une différence près toutefois : lorsque vous remplacez un gestionnaire d'événements hérité, vous devez supprimer la clause Handles.
Pour remplacer une méthode d'un gestionnaire d'événements hérité
-
Ajoutez le mot clé Overrides à votre
déclaration de méthode.
Remarque Il est conseillé de ne pas ajouter de clause Handles à la méthode. Le gestionnaire d'événements est déjà associé à l'événement de la classe de base et cette association est transmise à la classe qui en hérite. En d'autres termes, la méthode sera exécutée lorsque l'événement sera déclenché et elle ne requiert pas de clause Handles supplémentaire.
L'exemple ci-après illustre le remplacement du gestionnaire d'événements de l'exemple précédent :
Protected Overrides Sub Button1_Click(ByVal sender As System.Object, _
ByVal e as System.EventArgs)
Static Counter as Integer = 0
Counter += 1
MessageBox.Show (" Un utilisateur a cliqué sur ce bouton hérité " & _
Counter.ToString() & " fois.")
End Sub
Pourquoi la clause Handles est inutile
La clause Handles n'est plus associée à la méthode. Il ne s'agit pas d'une erreur, mais bien d'un aspect spécifique du mode de traitement des événements par le .NET Framework. Le gestionnaire d'événements est déjà associé à l'événement de la classe de base et cette association est transmise à la classe qui en hérite. En d'autres termes, la méthode sera exécutée lorsque l'événement sera déclenché et elle ne requiert pas de clause Handles supplémentaire. L'ajout d'une clause Handles supplémentaire, comme ci-dessous, a pour effet de créer une nouvelle association à l'événement et de provoquer l'exécution de la méthode deux fois par événement.
' INCORRECT
Protected Overrides Sub Button1_Click(ByVal sender As System.Object, _
ByVal e as System.EventArgs) Handles Button1.Click
Static Counter as Integer = 0
' Cette variable sera incrémentée deux fois à chaque clic sur
' ce bouton.
Counter += 1
' Le message apparaîtra deux fois lorsqu'un utilisateur
' cliquera sur le bouton
' et des informations inexactes seront affichées.
MessageBox.Show (" Un utilisateur a cliqué sur ce bouton hérité " & _
Counter.ToString() & " fois.")
End Sub
Conclusion
Le remplacement des gestionnaires d'événements peut être à l'origine de problèmes non intuitifs et provoquer des bogues difficiles à détecter. Il est très important de définir les associations convenables avec vos gestionnaires d'événements. Soyez vigilant et prenez en considération les associations d'événements déjà existantes.
Dernière mise à jour le jeudi 23 mai 2002