Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.
Conditions préalables
L’article suppose une connaissance de base des événements routés et que vous avez lu 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 Handlesde .
' 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 avec un objet défini dans le 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 de Friend WithEvents. L’exemple suivant montre comment déclarer un objet défini dans le code-behind à l’aide de WithEvents.
' 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 / Astuce
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 d’événement Handles nécessite l’élément XAML qui représente l’objet d’avoir une propriété <object name>.<event name> ou 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 Handlesde .
' 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 / Astuce
Visual Studio IntelliSense affiche les objets qui peuvent être utilisés avec Handles.
Que vous attachiez un gestionnaire d’événements à l’aide Handlesde 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
Handlespour 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 utiliserHandlespour attacher un gestionnaire d’événements Click à un bouton dont la classe ButtonBase de base déclenche l’événementClickrouté. 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é.Handlesne 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.La syntaxe
Handlesne prend pas en charge l’appel du gestionnaire d’événements pour les événements Handled. Pour permettre à votre gestionnaire d’événements d’être appelé pour des événementsHandled, attachez-le à l'aide de la méthode AddHandler(RoutedEvent, Delegate, Boolean) et définissez son paramètrehandledEventsTooàtrue.
Voir aussi
.NET Desktop feedback