RaiseEvent — Instrukcja
Wyzwala zdarzenie zadeklarowane na poziomie modułu w klasie, formularzu lub dokumencie.
Składnia
RaiseEvent eventname[( argumentlist )]
generatora
eventname
Wymagany. Nazwa zdarzenia do wyzwolenia.
argumentlist
Opcjonalny. Rozdzielana przecinkami lista zmiennych, tablic lub wyrażeń. Argument argumentlist
musi być ujęta nawiasami. Jeśli nie ma argumentów, nawiasy muszą zostać pominięte.
Uwagi
Wymagana eventname
jest nazwa zdarzenia zadeklarowanego w module. Jest zgodny z konwencjami nazewnictwa zmiennych języka Visual Basic.
Jeśli zdarzenie nie zostało zadeklarowane w module, w którym jest zgłaszane, wystąpi błąd. Poniższy fragment kodu ilustruje deklarację zdarzenia i procedurę, w której jest zgłaszane zdarzenie.
' Declare an event at module level.
Event LogonCompleted(ByVal UserName As String)
Sub Logon(ByVal UserName As String)
' Raise the event.
RaiseEvent LogonCompleted(UserName)
End Sub
Nie można użyć RaiseEvent
metody do zgłaszania zdarzeń, które nie są jawnie zadeklarowane w module. Na przykład wszystkie formularze dziedziczą Click zdarzenie z System.Windows.Forms.Formelementu , nie można go zgłaszać przy użyciu RaiseEvent
w postaci pochodnej. Jeśli zadeklarujesz Click
zdarzenie w module formularza, wymyka się ono własnemu Click zdarzeniu formularza. Nadal można wywołać zdarzenie formularza Click , wywołując metodę OnClick .
Domyślnie zdarzenie zdefiniowane w języku Visual Basic zgłasza programy obsługi zdarzeń w kolejności nawiązywania połączeń. Ponieważ zdarzenia mogą mieć ByRef
parametry, proces, który łączy się późno, może odbierać parametry, które zostały zmienione przez wcześniejszą procedurę obsługi zdarzeń. Po wykonaniu procedur obsługi zdarzeń kontrolka jest zwracana do podrouty, która wywołała zdarzenie.
Uwaga
Zdarzenia nieudzielone nie powinny być wywoływane w konstruktorze klasy, w której są deklarowane. Chociaż takie zdarzenia nie powodują błędów czasu wykonywania, mogą one nie zostać przechwycone przez skojarzone programy obsługi zdarzeń. Shared
Użyj modyfikatora, aby utworzyć zdarzenie udostępnione, jeśli musisz zgłosić zdarzenie z konstruktora.
Uwaga
Domyślne zachowanie zdarzeń można zmienić, definiując zdarzenie niestandardowe. W przypadku zdarzeń niestandardowych instrukcja RaiseEvent
wywołuje metodę dostępu zdarzenia RaiseEvent
. Aby uzyskać więcej informacji na temat zdarzeń niestandardowych, zobacz Event Statement (Instrukcja zdarzenia).
Przykład 1
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, w tym 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 aplikacji systemu Windows, dodaj przycisk o nazwie i pole tekstowe o nazwie Button1
do formularza głównego o nazwie Form1
TextBox1
. 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
Przykład 2
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 dokładnie taki sam sposób, jak w przypadku formularza. Aby zezwolić formularzowi na bezpośrednią obsługę zdarzeń, możesz użyć wielowątku. Aby uzyskać więcej informacji, zobacz Managed Threading (Zarządzanie wątkami).