Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Sie in Visual Basic .NET codieren, können Sie das sprachspezifische Handles-Schlüsselwort verwenden, um einen Ereignishandler an ein Objekt anzufügen. Das Objekt kann eine Instanz im CodeBehind oder ein Element in Extensible Application Markup Language (XAML) sein.
Handles kann verwendet werden, um Ereignishandler für CLR-Ereignisse (Common Language Runtime) oder Routingereignisse von Windows Presentation Foundation (WPF) zuzuweisen. Es gibt jedoch einige Handles, wenn es zum Anfügen von Ereignishandlern für geroutete Ereignisse verwendet wird.
Voraussetzungen
Im Artikel wird davon ausgegangen, dass Sie über grundlegende Kenntnisse im Zusammenhang mit Routingereignissen verfügen und die Übersicht über Routingereignisse gelesen haben. Um den Beispielen in diesem Artikel zu folgen, hilft es Ihnen, wenn Sie mit Extensible Application Markup Language (XAML) vertraut sind und wissen, wie Sie Windows Presentation Foundation (WPF)-Anwendungen schreiben.
Syntax
Die Syntax für eine Sub Deklaration, die das Handles-Schlüsselwort verwendet, lautet: Sub <procedure name> Handles <object name>.<event name>. Diese Syntax bezeichnet eine Prozedur als Ereignishandler, die ausgeführt wird, wenn ein Ereignis, das durch <event name> spezifiziert wird, bei einem vom <object name> angegebenen Objekt ausgelöst wird. Das Ereignis muss ein Mitglied der Klasse oder Basisklasse des Objekts sein. Das folgende Beispiel zeigt, wie Sie einen Ereignishandler an ein XAML-Element anhängen, Handles.
' 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
Handles Wenn Sie ein objekt verwenden möchten, das in CodeBehind definiert ist, deklarieren Sie das Objekt in der Regel mithilfe des WithEvents-Schlüsselworts. Weitere Informationen zur WithEvents Verwendung finden Sie in diesen Beispielen. WPF deklariert automatisch alle XAML-Elemente mithilfe von Friend WithEvents. Das folgende Beispiel zeigt, wie ein Objekt deklariert wird, das im Code-Behind mithilfe von WithEvents definiert ist.
' 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
Wenn Sie denselben Handler für mehrere Ereignisse verwenden möchten, trennen Sie die <object name>.<event name> Ereignisse durch Trennzeichen. Beispiel: Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click. Die Reihenfolge der kommagetrennten Ereignisse ist unwesentlich.
Sie können unterschiedliche Handler für dasselbe Ereignis mit mehreren Handles Anweisungen zuweisen. Die Reihenfolge der Handles Anweisungen bestimmt nicht die Reihenfolge, in der Handler aufgerufen werden, wenn das Ereignis auftritt.
Tipp
Rufen Sie remove a handler that was added with Handles, call RemoveHandler. Beispiel: RemoveHandler Button1.Click, AddressOf Button1_Click.
Verwenden von "Handles" in einer WPF-Anwendung
Für ein in XAML definiertes Objekt erfordert die Handles-Ereignissyntax <object name>.<event name> das XAML-Element, das das Objekt darstellt, um über eine Name oder x:Name-Eigenschaft zu verfügen. Für das XAML-Seitenstammelement ist jedoch keine Namenseigenschaft erforderlich, für die Sie den Namen Meverwenden können. Das folgende Beispiel zeigt, wie Sie mit Handles einen Ereignishandler am Stamm einer XAML-Seite anfügen.
' 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
Wenn eine XAML-Seite kompiliert wird, wird jedes XAML-Element mit einem Name oder x:Name Parameter als Friend WithEventsdeklariert. Daher können Sie jedes XAML-Element mit Handles verwenden.
Tipp
Visual Studio IntelliSense zeigt die Objekte an, mit Handlesdenen sie verwendet werden können.
Unabhängig davon, ob Sie einen Ereignishandler mithilfe Handlesder XAML-Attributsyntax, der AddHandler-Anweisung oder der AddHandler Methode anfügen, ist das Ereignissystemverhalten identisch.
Hinweis
Verwenden Sie nicht sowohl XAML-Attribute als auch Handles, um denselben Ereignishandler an dasselbe Ereignis anzuhängen, ansonsten wird der Ereignishandler zweimal für jedes Ereignis aufgerufen.
Einschränkungen
Das Handles-Schlüsselwort weist die folgenden Verwendungseinschränkungen auf:
Sie können nur dann
Handleseinen Ereignishandler an ein Objekt anfügen, wenn es sich bei dem Ereignis um ein Element der Klasse oder Basisklasse des Objekts handelt. Sie können beispielsweise einen Ereignishandler mitHandlesan eine Schaltfläche anfügen, deren Basisklasse Click das ButtonBase geroutete Ereignis auslöst. Eines der Features von Routingereignissen besteht jedoch darin, dass sie die Elementstruktur durchlaufen, wodurch es möglich ist, einClickEreignis auf einer höheren Ebene zu überwachen und zu behandeln als das Element, das es ausgelöst hat. Ein Routingereignis, auf das ein übergeordnetes Element lauscht und verarbeitet, wird als angefügtes Ereignis bezeichnet.Handleskann nicht für angefügte Ereignisse verwendet werden, da die Syntax die Angabe eines anderen Listeners in der XAML-Elementstruktur nicht unterstützt als das Element, das das Ereignis ausgelöst hat. Um Ereignishandler für angefügte Ereignisse zuzuweisen, müssen Sie entweder eine XAML-Attributsyntax oder die AddHandler Methode verwenden. Weitere Informationen zu angefügten Ereignissen finden Sie unter Übersicht über angefügte Ereignisse und angefügte Ereignisse in WPF.HandlesDie Syntax unterstützt keinen Ereignishandleraufruf für Handled Ereignisse. Um das Aufrufen des Ereignishandlers fürHandledEreignisse zu ermöglichen, fügen Sie den Ereignishandler mithilfe der AddHandler(RoutedEvent, Delegate, Boolean) Methode an, und legen Sie dessenhandledEventsTooParameter auftrue.
Siehe auch
.NET Desktop feedback