Event — Instrukcja
Deklaruje zdarzenie zdefiniowane przez użytkownika.
Składnia
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname[(parameterlist)] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname As delegatename _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Custom Event eventname As delegatename _
[ Implements implementslist ]
[ <attrlist> ] AddHandler(ByVal value As delegatename)
[ statements ]
End AddHandler
[ <attrlist> ] RemoveHandler(ByVal value As delegatename)
[ statements ]
End RemoveHandler
[ <attrlist> ] RaiseEvent(delegatesignature)
[ statements ]
End RaiseEvent
End Event
generatora
Element | opis |
---|---|
attrlist |
Opcjonalny. Lista atrybutów, które mają zastosowanie do tego zdarzenia. Wiele atrybutów jest rozdzielonych przecinkami. Należy ująć listę atrybutów w nawiasach kątowych ("< " i "> "). |
accessmodifier |
Opcjonalny. Określa, jaki kod może uzyskać dostęp do zdarzenia. Może być jednym z następujących elementów: - Publiczny — dowolny kod, który może uzyskać dostęp do elementu, który deklaruje, że może uzyskać do niego dostęp. - Chronione — tylko kod w swojej klasie lub klasie pochodnej może uzyskać do niego dostęp. - Przyjaciel — tylko kod w tym samym zestawie może uzyskać do niego dostęp. - Prywatny — tylko kod w elemecie, który deklaruje, że może uzyskać do niego dostęp. - Chroniony kod tylko zaprzyjaźniony w klasie zdarzenia, klasie pochodnej lub ten sam zestaw może uzyskać do niego dostęp. - Prywatny kod chroniony tylko w klasie zdarzenia lub klasie pochodnej w tym samym zestawie może uzyskać do niego dostęp. |
Shared |
Opcjonalny. Określa, że to zdarzenie nie jest skojarzone z określonym wystąpieniem klasy lub struktury. |
Shadows |
Opcjonalny. Wskazuje, że to zdarzenie redecyduje i ukrywa identycznie nazwany element programowania lub zestaw przeciążonych elementów w klasie bazowej. Możesz cieniować dowolny rodzaj zadeklarowanego elementu z dowolnym innym rodzajem. Element w tle jest niedostępny z klasy pochodnej, która go zaciemnia, z wyjątkiem tego, gdzie element cieniowania jest niedostępny. Jeśli na przykład Private element w tle element klasy bazowej, kod, który nie ma uprawnień dostępu do elementu, uzyskuje dostęp Private do elementu klasy bazowej zamiast tego. |
eventname |
Wymagany. Nazwa zdarzenia; jest zgodna ze standardową konwencją nazewnictwa zmiennych. |
parameterlist |
Opcjonalny. Lista zmiennych lokalnych reprezentujących parametry tego zdarzenia. Należy ująć listę parametrów w nawiasy. |
Implements |
Opcjonalny. Wskazuje, że to zdarzenie implementuje zdarzenie interfejsu. |
implementslist |
Wymagane w przypadku Implements dostarczenia. Sub Lista wdrożonych procedur. Wiele procedur jest rozdzielonych przecinkami:implementprocedure [ , implementprocedure ... ] Każda z nich implementedprocedure ma następującą składnię i części:interface .definedname - interface -Wymagane. Nazwa interfejsu, który implementuje ta procedura zawierająca klasę lub strukturę.- Definedname -Wymagane. Nazwa, za pomocą której procedura jest zdefiniowana w pliku interface . Nie musi to być takie samo jak name , nazwa, której używa ta procedura do zaimplementowania zdefiniowanej procedury. |
Custom |
Wymagany. Zdarzenia zadeklarowane jako Custom muszą definiować niestandardowe AddHandler metody dostępu , RemoveHandler i RaiseEvent . |
delegatename |
Opcjonalny. Nazwa delegata, który określa sygnaturę programu obsługi zdarzeń. |
AddHandler |
Wymagany. Deklaruje metodę AddHandler dostępu, która określa instrukcje do wykonania po dodaniu programu obsługi zdarzeń, jawnie przy użyciu instrukcji lub niejawnie przy użyciu AddHandler klauzuli Handles . |
End AddHandler |
Wymagany. AddHandler Przerywa blok. |
value |
Wymagany. Nazwa parametru. |
RemoveHandler |
Wymagany. Deklaruje metodę RemoveHandler dostępu, która określa instrukcje do wykonania po usunięciu programu obsługi zdarzeń przy użyciu instrukcji RemoveHandler . |
End RemoveHandler |
Wymagany. RemoveHandler Przerywa blok. |
RaiseEvent |
Wymagany. Deklaruje metodę RaiseEvent dostępu, która określa instrukcje do wykonania po wystąpieniu zdarzenia przy użyciu instrukcji RaiseEvent . Zazwyczaj wywołuje to listę delegatów obsługiwanych przez AddHandler metody i RemoveHandler . |
End RaiseEvent |
Wymagany. RaiseEvent Przerywa blok. |
delegatesignature |
Wymagany. Lista parametrów pasujących do parametrów wymaganych przez delegata delegatename . Należy ująć listę parametrów w nawiasy. |
statements |
Opcjonalny. Instrukcje zawierające elementy AddHandler metod , RemoveHandler i RaiseEvent . |
End Event |
Wymagany. Event Przerywa blok. |
Uwagi
Po zadeklarowaniu zdarzenia użyj instrukcji RaiseEvent
, aby zgłosić zdarzenie. Typowe zdarzenie może zostać zadeklarowane i podniesione, jak pokazano w następujących fragmentach:
Public Class EventSource
' Declare an event.
Public Event LogonCompleted(ByVal UserName As String)
Sub CauseEvent()
' Raise an event on successful logon.
RaiseEvent LogonCompleted("AustinSteele")
End Sub
End Class
Uwaga
Argumenty zdarzeń można zadeklarować tak samo jak argumenty procedur, z następującymi wyjątkami: zdarzenia nie mogą mieć nazwanych argumentów, ParamArray
argumentów ani Optional
argumentów. Zdarzenia nie mają zwracanych wartości.
Aby obsłużyć zdarzenie, należy skojarzyć je z podroutyną obsługi zdarzeń przy użyciu instrukcji Handles
or AddHandler
. Podpisy podrouty i zdarzenie muszą być zgodne. Aby obsłużyć zdarzenie udostępnione, należy użyć instrukcji AddHandler
.
Można używać Event
tylko na poziomie modułu. Oznacza to, że kontekst deklaracji zdarzenia musi być klasą, strukturą, modułem lub interfejsem i nie może być plikiem źródłowym, przestrzenią nazw, procedurą lub blokiem. Aby uzyskać więcej informacji, zobacz Konteksty deklaracji i Domyślne poziomy dostępu.
W większości przypadków można użyć pierwszej składni w sekcji Składnia tego tematu do deklarowania zdarzeń. Jednak niektóre scenariusze wymagają większej kontroli nad szczegółowym zachowaniem zdarzenia. Ostatnia składnia w sekcji Składnia tego tematu, która używa Custom
słowa kluczowego, zapewnia tę kontrolkę, umożliwiając definiowanie zdarzeń niestandardowych. W przypadku zdarzenia niestandardowego określasz dokładnie, co ma miejsce, gdy kod dodaje lub usuwa program obsługi zdarzeń do lub ze zdarzenia albo gdy kod zgłasza zdarzenie. Przykłady można znaleźć w temacie How to: Declare Custom Events To Conserve Memory ( Instrukcje: deklarowanie zdarzeń niestandardowych w celu uniknięcia blokowania).
Przykład
W poniższym przykładzie użyto zdarzeń, aby odliczyć sekundy z zakresu od 10 do 0. Kod ilustruje kilka metod, właściwości i instrukcji związanych z zdarzeniami. Obejmuje to instrukcję RaiseEvent
.
Klasa, która zgłasza zdarzenie, jest źródłem zdarzeń, a metody przetwarzania zdarzenia to programy obsługi zdarzeń. Źródło zdarzeń może mieć wiele procedur obsługi dla generowanych zdarzeń. Gdy klasa zgłasza zdarzenie, to zdarzenie jest wywoływane w każdej klasie, która wybrała obsługę zdarzeń dla tego wystąpienia obiektu.
W przykładzie użyto również formularza (Form1
) z przyciskiem (Button1
) i polem tekstowym (TextBox1
). Po kliknięciu przycisku pierwsze pole tekstowe wyświetla odliczanie z zakresu od 10 do 0 sekund. Po upływie pełnego czasu (10 sekund) pierwsze pole tekstowe wyświetla tekst "Gotowe".
Kod dla Form1
określa początkowe i końcowe stany formularza. Zawiera również kod wykonywany podczas wywoływanych zdarzeń.
Aby użyć tego przykładu, otwórz nowy projekt Windows Forms. Następnie dodaj przycisk o nazwie i pole tekstowe o nazwie Button1
TextBox1
do formularza głównego o nazwie Form1
. Następnie kliknij prawym przyciskiem myszy formularz i kliknij polecenie Wyświetl kod , aby otworzyć edytor kodu.
Dodaj zmienną WithEvents
do sekcji Form1
deklaracji klasy:
Private WithEvents mText As TimerState
Dodaj następujący kod do kodu dla elementu Form1
. Zastąp wszelkie zduplikowane procedury, które mogą istnieć, takie jak Form_Load
lub Button_Click
.
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Private Sub mText_ChangeText() Handles mText.Finished
TextBox1.Text = "Done"
End Sub
Private Sub mText_UpdateTime(ByVal Countdown As Double
) Handles mText.UpdateTime
TextBox1.Text = Format(Countdown, "##0.0")
' Use DoEvents to allow the display to refresh.
My.Application.DoEvents()
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Dim SoFar As Double = 0
Do While ElapsedTime < Duration
If ElapsedTime > SoFar + Increment Then
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
End If
ElapsedTime = DateAndTime.Timer - Start
Loop
RaiseEvent Finished()
End Sub
End Class
Naciśnij klawisz F5, aby uruchomić poprzedni przykład, a następnie kliknij przycisk z etykietą Uruchom. Pierwsze pole tekstowe zaczyna odliczać sekundy. Po upływie pełnego czasu (10 sekund) pierwsze pole tekstowe wyświetla tekst "Gotowe".
Uwaga
Metoda My.Application.DoEvents
nie przetwarza zdarzeń w taki sam sposób, jak formularz. Aby umożliwić formularzowi obsługę zdarzeń bezpośrednio, możesz użyć wielowątkowość. Aby uzyskać więcej informacji, zobacz Managed Threading (Zarządzanie wątkami).
Zobacz też
- RaiseEvent, instrukcja
- Implements, instrukcja
- Wydarzenia
- AddHandler, instrukcja
- RemoveHandler, instrukcja
- Obsługuje
- Delegate, instrukcja
- Instrukcje: deklarowanie zdarzeń niestandardowych w celu zachowywania pamięci
- Instrukcje: deklarowanie zdarzeń niestandardowych w celu unikania blokowania
- Shared
- Shadows