Udostępnij za pośrednictwem


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 Form1TextBox1 . 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).

Zobacz też