Gestion des événements Visual Basic et WPF (WPF .NET)

Si vous codez dans Visual Basic .NET, vous pouvez utiliser les handles spécifiques au langage mot clé 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). Handlespeut ê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.

Important

La documentation du Guide du bureau pour .NET 7 et .NET 6 est en cours de construction.

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 les handles mot clé est la suivante : 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 un objet défini dans code-behind, vous déclarez généralement l’objet à l’aide de with WithEvents mot clé. Pour plus d’informations sur WithEvents l’utilisation, consultez ces exemples. WPF déclare automatiquement tous les éléments XAML à l’aide Friend WithEventsde . L’exemple suivant montre comment déclarer un objet défini dans le code-behind à l’aide WithEventsde .

' 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 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

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

Les handles mot clé ont ces limitations d’utilisation :

  • 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 utiliser Handles pour attacher un gestionnaire d’événements Click à un bouton dont la classe ButtonBase de base déclenche l’événement Click 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 un Click é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é pour Handled les événements, attachez le gestionnaire d’événements à l’aide de la AddHandler(RoutedEvent, Delegate, Boolean) méthode et définissez son handledEventsToo paramètre truesur .

Voir aussi