Obsługa zdarzeń Visual Basic i WPF (WPF .NET)
Jeśli kodujesz na platformie .NET języka Visual Basic, możesz użyć słowa kluczowego Obsługa języka, aby dołączyć program obsługi zdarzeń do obiektu. Obiekt może być wystąpieniem w kodzie lub elementem w języku Extensible Application Markup Language (XAML). Handles
Może służyć do przypisywania programów obsługi zdarzeń dla zdarzeń środowiska uruchomieniowego języka wspólnego (CLR) lub zdarzeń kierowanych przez program Windows Presentation Foundation (WPF). Jednak Handles
ma pewne ograniczenia użycia, gdy są używane do dołączania programów obsługi zdarzeń dla zdarzeń kierowanych.
Wymagania wstępne
W tym artykule przyjęto założenie, że masz podstawową wiedzę na temat zdarzeń kierowanych i zapoznasz się z omówieniem zdarzeń trasowanych. Aby postępować zgodnie z przykładami w tym artykule, warto zapoznać się z językiem Extensible Application Markup Language (XAML) i wiedzieć, jak pisać aplikacje programu Windows Presentation Foundation (WPF).
Składnia
Składnia deklaracji używającej słowa kluczowego Sub
Handles to: Sub <procedure name> Handles <object name>.<event name>
. Ta składnia wyznacza procedurę jako procedurę obsługi zdarzeń, która będzie uruchamiana po wystąpieniu zdarzenia określonego przez <event name>
program na obiekcie określonym przez <object name>
. Zdarzenie musi być elementem członkowskim klasy obiektu lub klasy bazowej. W poniższym przykładzie pokazano, jak dołączyć procedurę obsługi zdarzeń do elementu XAML przy użyciu polecenia 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
Aby używać z Handles
obiektem zdefiniowanym w kodzie, zazwyczaj deklarujesz obiekt za pomocą słowa kluczowego WithEvents . Aby uzyskać więcej informacji na WithEvents
temat użycia, zobacz te przykłady. WPF automatycznie deklaruje wszystkie elementy XAML przy użyciu polecenia Friend WithEvents
. W poniższym przykładzie pokazano, jak zadeklarować obiekt zdefiniowany w kodzie za pomocą polecenia 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
Aby użyć tej samej procedury obsługi dla wielu zdarzeń, rozdziel zdarzenia <object name>.<event name>
przecinkami. Na przykład Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click
. Kolejność zdarzeń rozdzielanych przecinkami jest niematerialna.
Można przypisać różne programy obsługi dla tego samego zdarzenia z wieloma Handles
instrukcjami. Kolejność instrukcji Handles
nie określa kolejności wywoływanej procedury obsługi w momencie wystąpienia zdarzenia.
Napiwek
Aby usunąć procedurę obsługi, która została dodana za pomocą Handles
metody , wywołaj metodę RemoveHandler. Na przykład RemoveHandler Button1.Click, AddressOf Button1_Click
.
Używanie uchwytów w aplikacji WPF
W przypadku obiektu zdefiniowanego w języku XAML składnia <object name>.<event name>
zdarzeń Handles wymaga elementu XAML, który reprezentuje obiekt, aby mieć Name właściwość lub x:Name. Jednak właściwość name nie jest wymagana dla elementu głównego strony XAML, dla którego można użyć nazwy Me
. W poniższym przykładzie pokazano, jak dołączyć procedurę obsługi zdarzeń do katalogu głównego strony XAML przy użyciu polecenia Handles
.
' 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
Po skompilowaniu strony XAML każdy element XAML z parametrem Name
or x:Name
jest zadeklarowany jako Friend WithEvents
. W związku z tym można użyć dowolnego elementu XAML z elementem Handles
.
Napiwek
Funkcja IntelliSense programu Visual Studio pokazuje obiekty, których można używać z Handles
programem .
Niezależnie od tego, czy program obsługi zdarzeń jest dołączany przy użyciu Handles
składni atrybutu XAML, instrukcji AddHandler lub AddHandler metody, zachowanie systemu zdarzeń jest takie samo.
Uwaga
Nie używaj zarówno atrybutów XAML, jak i Handles
w celu dołączenia tej samej procedury obsługi zdarzeń do tego samego zdarzenia. W przeciwnym razie program obsługi zdarzeń zostanie wywołany dwa razy dla każdego zdarzenia.
Ograniczenia
Słowo kluczowe Handles ma następujące ograniczenia użycia:
Program obsługi zdarzeń można dołączyć do obiektu tylko
Handles
wtedy, gdy zdarzenie jest elementem członkowskim klasy obiektu lub klasy bazowej. Można na przykład użyćHandles
polecenia , aby dołączyć procedurę Click obsługi zdarzeń do przycisku, którego klasa ButtonBase bazowa zgłaszaClick
zdarzenie kierowane. Jednak jedną z funkcji zdarzeń kierowanych jest to, że przechodzą przez drzewo elementów, co umożliwia nasłuchiwanie i obsługęClick
zdarzenia na wyższym poziomie niż element, który go podniósł. Zdarzenie kierowane, dla którego element nadrzędny nasłuchuje i obsługuje, jest nazywane dołączonym zdarzeniem.Handles
Nie można używać w przypadku dołączonych zdarzeń, ponieważ jego składnia nie obsługuje określania innego odbiornika w drzewie elementów XAML niż element, który zgłosił zdarzenie. Aby przypisać programy obsługi zdarzeń dla dołączonych zdarzeń, należy użyć składni atrybutu AddHandler XAML lub metody. Aby uzyskać więcej informacji na temat dołączonych zdarzeń, zobacz Omówienie dołączonych zdarzeń i Dołączone zdarzenia w WPF.Handles
składnia nie obsługuje wywołania programu obsługi zdarzeń dla zdarzeń Handled . Aby umożliwić wywoływanie programu obsługi zdarzeń dlaHandled
zdarzeń, dołącz procedurę obsługi zdarzeń przy użyciu AddHandler(RoutedEvent, Delegate, Boolean) metody i ustaw jejhandledEventsToo
parametr natrue
.
Zobacz też
.NET Desktop feedback