Gestion des événements Visual Basic et WPF (WPF .NET)
Si vous codez dans Visual Basic .NET, vous pouvez utiliser le mot clé Handles propre au langage pour attacher un gestionnaire d’événements à un objet. L’objet peut être une instance dans code-behind ou un élément dans XAML (Extensible Application Markup Language). Handles
peut être utilisé pour affecter des gestionnaires d’événements pour les événements CLR (Common Language Runtime) ou les événements routés windows Presentation Foundation (WPF). Toutefois, Handles
certaines limitations d’utilisation sont présentes lorsqu’elles sont utilisées pour attacher des gestionnaires d’événements pour les événements routés.
Prérequis
L’article suppose une connaissance de base des événements routés et que vous avez lu la vue d’ensemble des événements routés. Pour suivre les exemples de cet article, il vous aide à connaître le langage XAML (Extensible Application Markup Language) et savoir comment écrire des applications Windows Presentation Foundation (WPF).
Syntaxe
La syntaxe d’une Sub
déclaration qui utilise le mot clé Handles est : Sub <procedure name> Handles <object name>.<event name>
. Cette syntaxe désigne une procédure comme gestionnaire d’événements qui s’exécutera lorsqu’un événement spécifié par <event name>
est déclenché sur un objet spécifié par <object name>
. L’événement doit être membre de la classe ou de la classe de base de l’objet. L’exemple suivant montre comment attacher un gestionnaire d’événements à un élément XAML à l’aide Handles
de .
' Click event handler attached to XamlButton using Handles.
Private Sub XamlButton_Click(sender As Object, e As RoutedEventArgs) Handles XamlButton.Click
' Handler logic.
Debug.WriteLine($"Click event handler attached to XamlButton using Handles.")
End Sub
Pour utiliser Handles
un objet défini dans code-behind, vous déclarez généralement l’objet à l’aide du mot clé WithEvents . Pour plus d’informations sur WithEvents
l’utilisation, consultez ces exemples. WPF déclare automatiquement tous les éléments XAML à l’aide Friend WithEvents
de . L’exemple suivant montre comment déclarer un objet défini dans le code-behind à l’aide WithEvents
de .
' Declare a new button using WithEvents.
Dim WithEvents CodeButton As New Button With {
.Content = "New button",
.Background = Brushes.Yellow
}
' Click event handler attached to CodeButton using Handles.
Private Sub CodeButton_Click(sender As Object, e As RoutedEventArgs) Handles CodeButton.Click
' Handler logic.
Debug.WriteLine($"Click event handler attached to CodeButton using Handles.")
End Sub
Pour utiliser le même gestionnaire pour plusieurs événements, séparez les <object name>.<event name>
événements par des virgules. Par exemple : Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click
. L’ordre des événements séparés par des virgules est immatérial.
Vous pouvez affecter différents gestionnaires pour le même événement avec plusieurs Handles
instructions. L’ordre des Handles
instructions ne détermine pas l’ordre dans lequel les gestionnaires sont appelés lorsque l’événement se produit.
Conseil
Pour supprimer un gestionnaire qui a été ajouté avec Handles
, appelez RemoveHandler. Par exemple : RemoveHandler Button1.Click, AddressOf Button1_Click
.
Utilisation de « Handles » dans une application WPF
Pour un objet défini en XAML, la syntaxe <object name>.<event name>
d’événement Handles nécessite l’élément XAML qui représente l’objet pour avoir une Name propriété ou x :Name. Toutefois, une propriété name n’est pas requise pour l’élément racine de la page XAML, pour laquelle vous pouvez utiliser le nom Me
. L’exemple suivant montre comment attacher un gestionnaire d’événements à une racine de page XAML à l’aide Handles
de .
' Loaded event handler attached to the XAML page root using Handles.
Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
' Handler logic.
Debug.WriteLine($"Loaded event handler attached to Window using Handles.")
End Sub
Lorsqu’une page XAML est compilée, chaque élément XAML avec un Name
ou x:Name
paramètre est déclaré en tant que Friend WithEvents
. Par conséquent, vous pouvez utiliser n’importe quel élément XAML avec Handles
.
Conseil
Visual Studio IntelliSense affiche les objets qui peuvent être utilisés avec Handles
.
Que vous attachiez un gestionnaire d’événements à l’aide Handles
de la syntaxe d’attribut XAML, de l’instruction AddHandler ou de la AddHandler méthode, le comportement du système d’événements est le même.
Remarque
N’utilisez pas les deux attributs XAML et Handles
pour attacher le même gestionnaire d’événements au même événement ; sinon, le gestionnaire d’événements sera appelé deux fois pour chaque événement.
Limites
Le mot clé Handles présente les limitations d’utilisation suivantes :
Vous pouvez uniquement utiliser
Handles
pour attacher un gestionnaire d’événements à un objet si l’événement est membre de la classe ou de la classe de base de l’objet. Par exemple, vous pouvez utiliserHandles
pour attacher un gestionnaire d’événements Click à un bouton dont la classe ButtonBase de base déclenche l’événementClick
routé. Toutefois, l’une des fonctionnalités des événements routés est qu’ils parcourent l’arborescence des éléments, ce qui permet d’écouter et de gérer unClick
événement à un niveau supérieur à l’élément qui l’a déclenché. Un événement routé qu’un élément parent écoute et gère est appelé événement attaché.Handles
ne peut pas être utilisé pour les événements attachés, car sa syntaxe ne prend pas en charge la spécification d’un autre écouteur dans l’arborescence d’éléments XAML que l’élément qui a déclenché l’événement. Pour affecter des gestionnaires d’événements pour les événements attachés, vous devez utiliser la syntaxe d’attribut XAML ou la AddHandler méthode. Pour plus d’informations sur les événements attachés, consultez la vue d’ensemble des événements attachés et les événements attachés dans WPF.Handles
la syntaxe ne prend pas en charge l’appel du gestionnaire d’événements pour Handled les événements. Pour permettre à votre gestionnaire d’événements d’être appelé pourHandled
les événements, attachez le gestionnaire d’événements à l’aide de la AddHandler(RoutedEvent, Delegate, Boolean) méthode et définissez sonhandledEventsToo
paramètretrue
sur .
Voir aussi
.NET Desktop feedback