Zdarzenia (Visual Basic)
Podczas, gdy może być wizualizować Visual Studio projektu jako seria procedur, które wykonywane w kolejności, w rzeczywistości większość programów są sterowane zdarzeniami — co oznacza przepływ wykonanie zależy od zewnętrznych zdarzeń o nazwie zdarzenia.
Zdarzenie jest sygnał, informującą aplikację, która wystąpiła czegoś ważnego.Na przykład, gdy użytkownik kliknie formant na formularzu, formularz można podnieść, Click zdarzenia i wywołanie procedury, która obsługuje to zdarzenie.Zdarzenia także zezwolić na oddzielne zadania do komunikowania się.Powiedzmy na przykład, że aplikacja wykonuje zadanie sortowania oddzielnie w z głównym aplikacji.Jeśli użytkownik anuluje sortowanie, aplikacji, można wysłać Zdarzenie cancel, nakazując zatrzymanie procesu sortowania.
Zdarzenie terminy i pojęcia
W tej sekcji opisano terminów i pojęć używanych z wydarzenia w Visual Basic.
Deklarowanie zdarzeń
Stwierdzenie zdarzenia w obrębie klasy, struktury, moduły i przy użyciu interfejsów Event słowa kluczowego, jak w poniższym przykładzie:
Event AnEvent(ByVal EventNumber As Integer)
Podnoszenie zdarzeń
Zdarzenie jest jak wiadomość informującą, że wystąpił czegoś ważnego.Akt nadawanie wiadomości jest nazywany Podnoszenie zdarzenia.W Visual Basic, podnieść zdarzenia z RaiseEvent instrukcji, jak w poniższym przykładzie:
RaiseEvent AnEvent(EventNumber)
Zdarzenia musi zostać podniesiony w zakresie klasy, moduł lub strukturę, gdzie są one zgłoszone.Na przykład klasy dziedziczącej nie może podnieść zdarzenia dziedziczona z klasy bazowej.
Zdarzenie nadawców
Dowolny obiekt, zdolnych do podnoszenia zdarzenie jest nadawcy zdarzenia, znany również jako Źródło zdarzenia.Formularze, formanty i obiekty zdefiniowane przez użytkownika są przykłady zdarzeń nadawców.
Programy obsługi zdarzeń
Programy obsługi zdarzeń są procedury, które są wywoływane po wystąpieniu odpowiedniego zdarzenia.Za pomocą wszelkich podprocedury ważne i pasującego podpisu jako program obsługi zdarzeń.Nie można jednak należy użyć funkcji jako program obsługi zdarzeń, ponieważ go nie zwraca wartości do źródła zdarzeń.
Visual Basicużywa standardowych konwencji nazewnictwa dla obsługi zdarzeń, które łączy w sobie nazwę nadawcy zdarzenia, podkreślenia i nazwa zdarzenia.Na przykład Click zdarzenia przycisk o nazwie button1 otrzymałby nazwę Sub button1_Click.
[!UWAGA]
Zaleca się, że przy definiowaniu programy obsługi zdarzeń dla zdarzenia własne, użyj tej konwencji nazewnictwa, ale nie jest wymagane; można użyć dowolnej nazwy podprocedury ważne.
Kojarzenie zdarzenia z programów obsługi zdarzeń
Przed można używać programu obsługi zdarzeń, musisz najpierw skojarzyć go z zdarzenie przy użyciu Handles lub AddHandler instrukcji.
WithEvents i Klauzula Handles
WithEvents Instrukcji i Handles klauzuli zapewniają deklaracyjne sposób określania programów obsługi zdarzeń.Zdarzenie wywoływane przez obiekt zadeklarowana z WithEvents słowa kluczowego mogą być obsługiwane przez jakąkolwiek procedurą z Handles instrukcji dla zdarzenia, jak pokazano w następującym przykładzie:
' Declare a WithEvents variable.
Dim WithEvents EClass As New EventClass
' Call the method that raises the object's events.
Sub TestEvents()
EClass.RaiseEvents()
End Sub
' Declare an event handler that handles multiple events.
Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent
MsgBox("Received Event.")
End Sub
Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
WithEvents Instrukcji i Handles klauzuli są często najlepszym wyborem dla obsługi zdarzeń, ponieważ deklaracyjne składni używają ułatwia obsługi zdarzeń w kodzie, odczytywać i debugowania.Należy jednak pamiętać o następujące ograniczenia dotyczące stosowania WithEvents zmiennych:
Nie można użyć WithEvents zmienną jako zmienną obiektu.Oznacza to, że nie można deklarować go jako Object— przy deklarowaniu zmiennej, należy określić nazwę klasy.
Ponieważ udostępnione zdarzeniasą nie są powiązane z instancjami klasy, nie można użyć WithEvents deklaratywny obsługi zdarzeń udostępnionych.Podobnie, nie można użyć WithEvents lub Handles do obsługi zdarzeń z Structure.W obu przypadkach można użyć AddHandler instrukcji obsługi tych zdarzeń.
Nie można utworzyć tablic WithEvents zmiennych.
WithEventsZmienne umożliwiają obsługi pojedynczego zdarzenia do obsługi jednego lub więcej rodzajów zdarzeń lub jeden lub więcej programów obsługi zdarzeń do obsługi tego samego rodzaju zdarzeń.
Chociaż Handles klauzuli jest standardowy sposób Kojarzenie zdarzenia z programu obsługi zdarzeń, jest ograniczona do kojarzenia zdarzenia z obsługą zdarzeń w czasie kompilacji.
W niektórych przypadkach takich jak zdarzenia związane z formularzami lub formantami, Visual Basic automatycznie architektoniczne spoza programu obsługi zdarzeń puste i kojarzy ją z zdarzenie.Na przykład, po dwukrotnym kliknięciu przycisku polecenia na formularzu w trybie projektowania, Visual Basic tworzy moduł obsługi zdarzenia puste i WithEvents zmienną dla przycisku polecenia, jak w poniższym kodzie:
Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click() Handles Button1.Click
End Sub
AddHandler i RemoveHandler
AddHandler Instrukcja jest podobna do Handles w klauzuli, że zarówno umożliwiają określenie programu obsługi zdarzeń.Jednakże AddHandler, używany z RemoveHandler, zapewnia większą elastyczność niż Handles klauzuli, umożliwiając dynamicznego dodawania, usuwanie i zmianę obsługi zdarzenia skojarzoną ze zdarzeniem.Do obsługi lub zdarzenia udostępnionych od struktury, należy użyć AddHandler.
AddHandlerma dwa argumenty: nazwę zdarzenia od nadawcy zdarzenia, takie jak formant i wyrażenie pełnomocnikowi.Nie trzeba jawnie określić klasy delegata podczas korzystania z AddHandler, ponieważ AddressOf instrukcji zawsze zwraca odwołanie do obiektu delegowanego.Poniższy przykład kojarzy programu obsługi zdarzeń z podniesionych przez obiekt zdarzenia:
AddHandler Obj.XEvent, AddressOf Me.XEventHandler
RemoveHandler, która odłącza zdarzenie z programu obsługi zdarzeń używa tej samej składni, jak AddHandler.Na przykład:
RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler
W poniższym przykładzie moduł obsługi zdarzeń jest skojarzony ze zdarzeniem, a zdarzenie jest wywoływane.Obsługa zdarzeń połowy zdarzenia i wyświetla komunikat.
Następnie pierwszy obsługi zdarzeń jest usuwany i obsługi różnych zdarzeń jest skojarzony ze zdarzeniem.Gdy zdarzenie jest wywoływane ponownie, jest wyświetlany inny komunikat.
Wreszcie drugi obsługi zdarzeń są usuwane, a zdarzenie jest wywoływane po raz trzeci.Ponieważ moduł obsługi zdarzenia skojarzoną ze zdarzeniem już istnieje, zostanie podjęta żadna akcja.
Module Module1
Sub Main()
Dim c1 As New Class1
' Associate an event handler with an event.
AddHandler c1.AnEvent, AddressOf EventHandler1
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler1
' Now associate a different event handler with the event.
AddHandler c1.AnEvent, AddressOf EventHandler2
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler2
' This event will not be handled.
c1.CauseTheEvent()
End Sub
Sub EventHandler1()
' Handle the event.
MsgBox("EventHandler1 caught event.")
End Sub
Sub EventHandler2()
' Handle the event.
MsgBox("EventHandler2 caught event.")
End Sub
Public Class Class1
' Declare an event.
Public Event AnEvent()
Sub CauseTheEvent()
' Raise an event.
RaiseEvent AnEvent()
End Sub
End Class
End Module
Obsługa zdarzeń jest dziedziczona z klasy podstawowej
Klasy pochodne— klas, które dziedziczą właściwości klasy podstawowej — mogą obsługiwać zdarzenia wywoływane przy ich użyciu klasy bazowej HandlesMyBase instrukcji.
Do obsługi zdarzeń od klasy podstawowej
Zadeklarować funkcję obsługi zdarzeń w klasie pochodnej przez dodanie Handles MyBase.eventname instrukcję w wierszu deklaracji procedura obsługi zdarzenia, gdy eventname jest nazwą zdarzenia w klasie podstawowej są obsługi.Na przykład:
Public Class BaseClass Public Event BaseEvent(ByVal i As Integer) ' Place methods and properties here. End Class Public Class DerivedClass Inherits BaseClass Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent ' Place code to handle events from BaseClass here. End Sub End Class
Sekcje pokrewne
Tytuł |
Opis |
---|---|
Wskazówki: deklarowanie i wywoływanie zdarzeń (Visual Basic) |
Krok po kroku opisano sposób zadeklarować i podnieść zdarzenia dla klasy. |
Demonstruje, jak napisać procedurę obsługi zdarzenia. |
|
Porady: deklarowanie zdarzeń niestandardowych w celu unikania blokowania (Visual Basic) |
Demonstruje, jak zdefiniować niestandardowe zdarzenie, które umożliwia jej obsługi zdarzeń do wywoływania asynchronicznego. |
Porady: deklarowanie zdarzeń niestandardowych w celu zachowywania pamięci (Visual Basic) |
Demonstruje, jak zdefiniować niestandardowe zdarzenie, które korzysta z pamięci tylko wtedy, gdy zdarzenie jest obsługiwane. |
Rozwiązywanie problemów związanych z odziedziczonymi programami obsługi zdarzeń w Visual Basic |
Wyświetla listę typowych problemów, które powstają z obsługą zdarzeń składników dziedziczone. |
Zawiera omówienie modelu zdarzeń w .NET Framework. |
|
Tworzenie programów obsługi zdarzeń w formularzach systemu Windows |
W tym artykule opisano, jak pracować z zdarzenia skojarzone z obiektami Windows Forms. |
Zawiera omówienie delegatów w języku Visual Basic. |