Udostępnij za pomocą


RaiseEvent, instrukcja

Wyzwala zdarzenie zadeklarowane na poziomie modułu w klasie, formularzu lub dokumencie.

Składnia

RaiseEvent eventname[( argumentlist )]  

Części

eventname
To jest wymagane. 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 / Notatka

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 / Notatka

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 pokazano czasomierz, który odlicza się od 10 do 0 sekund i wyświetla postęp w konsoli. Po zakończeniu odliczania zostanie wyświetlony komunikat "Gotowe".

Zadeklaruj zmienną WithEvents w klasie, aby obsługiwać zdarzenia z czasomierza:

Public Class TimerExample
    Private WithEvents mTimer As TimerState

Przykład 2

Dodaj następujący kod, aby zaimplementować programy obsługi zdarzeń i logikę czasomierza. W tym przykładzie pokazano, jak używać instrukcji w RaiseEvent celu powiadamiania procedur obsługi zdarzeń po zaktualizowaniu lub zakończeniu czasomierza.

    Public Sub StartCountdownExample()
        mTimer = New TimerState()
        mTimer.StartCountdown(10.0, 1.0)
    End Sub

    Private Sub mTimer_UpdateTime(ByVal Countdown As Double) Handles mTimer.UpdateTime
        Console.WriteLine("Time remaining: " & Format(Countdown, "##0.0") & " seconds")
    End Sub

    Private Sub mTimer_Finished() Handles mTimer.Finished
        Console.WriteLine("Done")
    End Sub
End Class

Public Class TimerState
    Public Event UpdateTime(ByVal Countdown As Double)
    Public Event Finished()
    Public Sub StartCountdown(ByVal Duration As Double,
                              ByVal Increment As Double)
        Dim SoFar As Double = 0
        Do While SoFar < Duration
            System.Threading.Thread.Sleep(CInt(Increment * 1000))
            SoFar += Increment
            RaiseEvent UpdateTime(Duration - SoFar)
        Loop
        RaiseEvent Finished()
    End Sub
End Class

Po uruchomieniu poprzedniego przykładu rozpoczyna się odliczanie sekund od 10 do 0, wyświetlając postęp w konsoli. Gdy upłynął pełny czas (10 sekund), zostanie wyświetlony komunikat "Gotowe".

Zobacz także