Oświadczenie zdarzeń
Deklaruje zdarzenia zdefiniowane przez użytkownika.
[ <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
Części
Część |
Opis |
attrlist |
Opcjonalne.Lista atrybutów, które stosuje się do tego zdarzenia.Wiele atrybutów są oddzielone przecinkami.Należy ująć Lista atrybutów (Visual Basic) w nawiasy ostre ("<"i">"). |
accessmodifier |
Opcjonalne.Określa, jakiego można uzyskać dostęp do zdarzenia.Może mieć jedną z następujących czynności:
Można określić Protected Friend aby umożliwić dostęp z kodu klasy event, Klasa pochodna lub tego samego zestawu. |
Shared |
Opcjonalne.Określa, że to zdarzenie nie jest skojarzony z konkretnego wystąpienia klasy lub struktury. |
Shadows |
Opcjonalne.Wskazuje, że to zdarzenie redeclares i ukrywa element programowania o identycznej nazwie, lub zestaw elementów przeciążony, w klasie podstawowej.Można cień wszelkiego rodzaju deklarowanych elementu z innego rodzaju. Element cieniem jest niedostępne w klasie pochodnej, która cieni, z wyjątkiem, od których przesłaniania element jest niedostępny.Na przykład jeśli Private element cieni element klasy base, kod, który nie ma uprawnień dostępu do Private elementu zamiast uzyskuje dostęp do elementu klasa bazowa. |
eventname |
Wymagane.Nazwa zdarzenia; następuje standardowymi konwencjami nazewnictwa zmiennych. |
parameterlist |
Opcjonalne.Lista zmiennych lokalnych, które reprezentują parametry tego zdarzenia.Należy ująć Lista parametrów (Visual Basic) w nawiasach. |
Implements |
Opcjonalne.Wskazuje, że to zdarzenie implementuje zdarzenia interfejsu. |
implementslist |
Wymagany, jeżeli Implements jest dostarczany.Lista Sub procedur realizowane.Wiele procedur są oddzielone przecinkami: implementedprocedure [, implementedprocedure ...] Każdy implementedprocedure ma następującą składnię i części: interface.definedname
CzęśćOpis
interface Wymagane.Nazwa interfejsu, że procedura ta zawierający klasy lub struktury jest wykonawczych.
definedname Wymagane.Nazwa, przez który procedury jest zdefiniowany w interface.Nie ma być taka sama, jak name, nazwę, która używa tej procedury do wprowadzenia procedury zdefiniowane.
|
Custom |
Wymagane.Zdarzenia deklarowane jako Custom należy zdefiniować niestandardowy AddHandler, RemoveHandler, i RaiseEvent akcesorów. |
delegatename |
Opcjonalne.Nazwa pełnomocnika, który określa podpis obsługi zdarzeń. |
AddHandler |
Wymagane.Oświadcza, AddHandler akcesora, który określa instrukcji do wykonania po dodaniu programu obsługi zdarzeń, albo jawnie przy użyciu AddHandler instrukcji lub niejawnie, przy użyciu Handles klauzuli. |
End AddHandler |
Wymagane.Kończy działanie AddHandler bloku. |
value |
Wymagane.Nazwa parametru. |
RemoveHandler |
Wymagane.Oświadcza, RemoveHandler akcesora, który określa instrukcji do wykonania po usunięciu programu obsługi zdarzeń przy użyciu RemoveHandler instrukcji. |
End RemoveHandler |
Wymagane.Kończy działanie RemoveHandler bloku. |
RaiseEvent |
Wymagane.Oświadcza, RaiseEvent akcesora, który określa instrukcji do wykonania, gdy zdarzenie jest wywoływane za pomocą RaiseEvent instrukcji.Zwykle wywołuje listy obiektów delegowanych utrzymywane przez AddHandler i RemoveHandler akcesorów. |
End RaiseEvent |
Wymagane.Kończy działanie RaiseEvent bloku. |
delegatesignature |
Wymagane.Listę parametrów, który odpowiada parametrów wymaganych przez delegatename delegować.Należy ująć Lista parametrów (Visual Basic) w nawiasach. |
statements |
Opcjonalne.Sprawozdania, które zawierają organów AddHandler, RemoveHandler, i RaiseEvent metody. |
End Event |
Wymagane.Kończy działanie Event bloku. |
Uwagi
Kiedy zdarzenie zostało zgłoszone, należy użyć RaiseEvent instrukcji, aby podnieść zdarzenia.Typowe zdarzeń może być zgłoszone i podniesiona, jak pokazano w następujących fragmentów:
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]
Można zadeklarować argumentów zdarzeń, tak samo, jak argumenty procedur, z następującymi wyjątkami: zdarzenia nie nazwane argumenty, ParamArray argumentów lub Optional argumentów.Zdarzenia nie mają wartości zwracanych.
Aby obsługiwać zdarzenie, musisz skojarzyć go z podprogram obsługi zdarzeń, za pomocą Handles lub AddHandler instrukcji.Podpisy podprocedurę i zdarzenia musi być zgodna.Aby obsłużyć zdarzenia udostępnionych, należy użyć AddHandler instrukcji.
Można użyć Event tylko na poziomie modułu.Oznacza to, kontekście deklaracji dla zdarzenia musi być klasy, struktury, moduł lub interfejsu i nie może być plik źródłowy, obszar nazw, procedury lub bloku.Aby uzyskać więcej informacji, zobacz Konteksty deklaracji i poziomy dostępu domyślne (Visual Basic).
W większości przypadków można użyć pierwszej składni w sekcji Składnia w tym temacie dla zgłaszania zdarzeń.Jednak kilka scenariuszy, wymagają, że masz większą kontrolę nad zachowaniem szczegółowe zdarzenia.Ostatni składni w sekcji tego tematu, który używa składni Custom słowa kluczowego, zawiera formant poprzez umożliwienie definiowania niestandardowych zdarzeń.W przypadku niestandardowych określić dokładnie to, co się dzieje, gdy kod dodaje lub usuwa obsługi zdarzeń lub zdarzenia, lub gdy kod wywołuje zdarzenie.Przykłady, zobacz Jak: zadeklarować zdarzenia niestandardowe, aby zachować więcej wolnej pamięci (Visual Basic) i Jak: zadeklarować zdarzenia niestandardowe, aby uniknąć blokowania (Visual Basic).
Przykład
Poniższy przykład używa zdarzenia do odliczany czas sekund od 10 do 0.Kod ilustruje szereg zdarzeń związanych z metod, właściwości i instrukcje.Obejmuje to RaiseEvent instrukcji.
Klasa, która wywołuje zdarzenie jest źródłem zdarzeń i metod, które przetwarzają zdarzenia są programy obsługi zdarzeń.Źródło zdarzeń mogą mieć procedury obsługi wielu zdarzeń, który generuje.Gdy klasa wywołuje zdarzenie, że zdarzenie jest wywoływane na każdej klasy, który został wybrany do obsługi zdarzeń dla tego wystąpienia obiektu.
W przykładzie użyto również formularz (Form1) z przycisku (Button1) i pole tekstowe (TextBox1).Po kliknięciu przycisku, pierwsze pole tekstowe Wyświetla odliczanie od 10 do 0 sekund.Po upływie czasu pełnego (10 sekund), pierwsze pole tekstowe Wyświetla "Gotowe".
Kod Form1 określa Państwa początkowych i końcowych w formularzu.Zawiera ono również kod wykonywany, gdy są wywoływane zdarzenia.
Aby wykorzystać ten przykład, należy otworzyć nowy projekt Windows Forms.Następnie dodać przycisk o nazwie Button1 i pola tekstowego o nazwie TextBox1 do głównego formularza o nazwie Form1.Następnie kliknij prawym przyciskiem myszy formularz i kliknij przycisk Widok Kod , aby otworzyć Edytor kodu.
Dodaj WithEvents zmienna w sekcji deklaracji Form1 klasy:
Private WithEvents mText As TimerState
Dodaj następujący kod do kodu Form1.Zamień duplikaty procedur, które mogą istnieć, takich 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ć z poprzedniego przykładu, a następnie kliknij przycisk z etykietą uruchomić.Pierwsze pole tekstowe rozpoczyna odliczanie sekund.Po upływie czasu pełnego (10 sekund), pierwsze pole tekstowe Wyświetla "Gotowe".
[!UWAGA]
My.Application.DoEvents Metoda nie może przetwarzać zdarzenia w taki sam sposób, formularz nie.Aby włączyć formularz bezpośrednio obsługiwać zdarzenia, można użyć wielowątkowość.Aby uzyskać więcej informacji, zobacz Wątki (C# i Visual Basic).
Zobacz też
Zadania
Jak: zadeklarować zdarzenia niestandardowe, aby zachować więcej wolnej pamięci (Visual Basic)
Jak: zadeklarować zdarzenia niestandardowe, aby uniknąć blokowania (Visual Basic)
Informacje
Klauzula Handles (Visual Basic)