Freigeben über


RaiseEvent-Anweisung

Löst ein Ereignis aus, das auf Modulebene innerhalb einer Klasse, eines Formulars oder dokuments deklariert wird.

Syntax

RaiseEvent eventname[( argumentlist )]  

Bestandteile

eventname
Erforderlich. Name des auszulösende Ereignisses.

argumentlist
Wahlfrei. Durch Trennzeichen getrennte Liste von Variablen, Arrays oder Ausdrücken. Das argumentlist Argument muss durch Klammern eingeschlossen werden. Wenn keine Argumente vorhanden sind, müssen die Klammern weggelassen werden.

Bemerkungen

Dies eventname ist der Name eines Ereignisses, das innerhalb des Moduls deklariert ist. Es folgt Visual Basic-Benennungskonventionen für Variablen.

Wenn das Ereignis nicht innerhalb des Moduls deklariert ist, in dem es ausgelöst wird, wird ein Fehler ausgegeben. Das folgende Codefragment veranschaulicht eine Ereignisdeklaration und eine Prozedur, in der das Ereignis ausgelöst wird.

' 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

Sie können keine RaiseEvent Ereignisse auslösen, die nicht explizit im Modul deklariert sind. Beispielsweise erben alle Formulare ein Click Ereignis von System.Windows.Forms.Form, es kann nicht mithilfe RaiseEvent eines abgeleiteten Formulars ausgelöst werden. Wenn Sie ein Click Ereignis im Formularmodul deklarieren, schattiert es das eigene Click Ereignis des Formulars. Sie können das Ereignis des Formulars Click weiterhin aufrufen, indem Sie die OnClick Methode aufrufen.

Standardmäßig löst ein in Visual Basic definiertes Ereignis seine Ereignishandler in der Reihenfolge aus, in der die Verbindungen hergestellt werden. Da Ereignisse Parameter aufweisen ByRef können, kann ein Prozess, der verspätet eine Verbindung herstellt, Parameter empfangen, die von einem früheren Ereignishandler geändert wurden. Nachdem die Ereignishandler ausgeführt wurden, wird das Steuerelement an die Unterroutine zurückgegeben, die das Ereignis ausgelöst hat.

Hinweis

Nicht freigegebene Ereignisse sollten nicht innerhalb des Konstruktors der Klasse ausgelöst werden, in der sie deklariert werden. Obwohl solche Ereignisse keine Laufzeitfehler verursachen, können sie möglicherweise nicht von zugehörigen Ereignishandlern abgefangen werden. Verwenden Sie den Shared Modifizierer, um ein freigegebenes Ereignis zu erstellen, wenn Sie ein Ereignis aus einem Konstruktor auslösen müssen.

Hinweis

Sie können das Standardverhalten von Ereignissen ändern, indem Sie ein benutzerdefiniertes Ereignis definieren. Bei benutzerdefinierten Ereignissen ruft die RaiseEvent Anweisung den Accessor des Ereignisses RaiseEvent auf. Weitere Informationen zu benutzerdefinierten Ereignissen finden Sie unter Event Statement.

Beispiel 1

Im folgenden Beispiel werden Ereignisse verwendet, um Sekunden von 10 auf 0 zu zählen. Der Code veranschaulicht mehrere ereignisbezogene Methoden, Eigenschaften und Anweisungen, einschließlich der RaiseEvent Anweisung.

Die Klasse, die ein Ereignis auslöst, ist die Ereignisquelle, und die Methoden, die das Ereignis verarbeiten, sind die Ereignishandler. Eine Ereignisquelle kann über mehrere Handler für die von ihr generierten Ereignisse verfügen. Wenn die Klasse das Ereignis auslöst, wird dieses Ereignis für jede Klasse ausgelöst, die sich für die Behandlung von Ereignissen für diese Instanz des Objekts ausgewählt hat.

Das Beispiel zeigt einen Timer, der zwischen 10 und 0 Sekunden zählt, und zeigt den Fortschritt der Konsole an. Nach Abschluss des Countdowns wird "Fertig" angezeigt.

Deklarieren Sie eine WithEvents Variable in Ihrer Klasse, um Ereignisse vom Timer zu behandeln:

Public Class TimerExample
    Private WithEvents mTimer As TimerState

Beispiel 2

Fügen Sie den folgenden Code hinzu, um die Ereignishandler und Die Zeitgeberlogik zu implementieren. In diesem Beispiel wird gezeigt, wie Die RaiseEvent Anweisung verwendet wird, um Ereignishandler zu benachrichtigen, wenn der Timer aktualisiert oder abgeschlossen wird.

    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

Wenn Sie das vorherige Beispiel ausführen, beginnt es, die Sekunden von 10 bis 0 nach unten zu zählen, und zeigt den Fortschritt auf der Konsole an. Wenn die Vollzeitzeit (10 Sekunden) abgelaufen ist, wird "Fertig" angezeigt.

Siehe auch