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 Me
verwenden 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 WithEvents
deklariert. Daher können Sie jedes XAML-Element mit Handles
verwenden.
Tipp
Visual Studio IntelliSense zeigt die Objekte an, mit Handles
denen sie verwendet werden können.
Unabhängig davon, ob Sie einen Ereignishandler mithilfe Handles
der 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
Handles
einen 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 mitHandles
an 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, einClick
Ereignis 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.Handles
kann 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.Handles
Die Syntax unterstützt keinen Ereignishandleraufruf für Handled Ereignisse. Um das Aufrufen des Ereignishandlers fürHandled
Ereignisse zu ermöglichen, fügen Sie den Ereignishandler mithilfe der AddHandler(RoutedEvent, Delegate, Boolean) Methode an, und legen Sie dessenhandledEventsToo
Parameter auftrue
.
Siehe auch
.NET Desktop feedback