Dela via


RaiseEvent-instruktion

Utlöser en händelse som deklareras på modulnivå i en klass, ett formulär eller ett dokument.

Syntax

RaiseEvent eventname[( argumentlist )]  

Delar

eventname
Obligatoriskt. Namnet på händelsen som ska utlösas.

argumentlist
Valfritt. Kommaavgränsad lista över variabler, matriser eller uttryck. Argumentet argumentlist måste omges av parenteser. Om det inte finns några argument måste parenteserna utelämnas.

Anmärkningar

Det nödvändiga eventname är namnet på en händelse som deklarerats i modulen. Den följer namngivningskonventionerna för Visual Basic-variabler.

Om händelsen inte har deklarerats i modulen där den utlöses uppstår ett fel. Följande kodfragment illustrerar en händelsedeklaration och en procedur där händelsen genereras.

' 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

Du kan inte använda RaiseEvent för att skapa händelser som inte uttryckligen deklareras i modulen. Till exempel ärver alla formulär en Click händelse från System.Windows.Forms.Form, den kan inte genereras med hjälp av RaiseEvent ett härlett formulär. Om du deklarerar en Click händelse i formulärmodulen skuggar den formulärets egen Click händelse. Du kan fortfarande anropa formulärets Click händelse genom att anropa OnClick metoden.

Som standard genererar en händelse som definieras i Visual Basic sina händelsehanterare i den ordning som anslutningarna upprättas. Eftersom händelser kan ha ByRef parametrar kan en process som ansluter sent ta emot parametrar som har ändrats av en tidigare händelsehanterare. När händelsehanterarna har körts returneras kontrollen till den underrutin som utlöste händelsen.

Anmärkning

Icke-delade händelser bör inte genereras inom konstruktorn för den klass där de deklareras. Även om sådana händelser inte orsakar körningsfel kan de inte fångas upp av associerade händelsehanterare. Shared Använd modifieraren för att skapa en delad händelse om du behöver skapa en händelse från en konstruktor.

Anmärkning

Du kan ändra standardbeteendet för händelser genom att definiera en anpassad händelse. För anpassade händelser RaiseEvent anropar -instruktionen händelsens RaiseEvent accessor. Mer information om anpassade händelser finns i Händelseuttryck.

Exempel 1

I följande exempel används händelser för att räkna ned sekunder från 10 till 0. Koden illustrerar flera av de händelserelaterade metoderna, egenskaperna och -instruktionerna, inklusive -instruktionen RaiseEvent .

Klassen som genererar en händelse är händelsekällan och de metoder som bearbetar händelsen är händelsehanterarna. En händelsekälla kan ha flera hanterare för de händelser som genereras. När klassen genererar händelsen utlöses händelsen för varje klass som har valt att hantera händelser för den instansen av objektet.

Exemplet visar en timer som räknar ned från 10 till 0 sekunder och visar förloppet till konsolen. När nedräkningen är klar visas "Klar".

Deklarera en WithEvents variabel i klassen för att hantera händelser från timern:

Public Class TimerExample
    Private WithEvents mTimer As TimerState

Exempel 2

Lägg till följande kod för att implementera händelsehanterare och timerlogik. Det här exemplet visar hur du använder -instruktionen RaiseEvent för att meddela händelsehanterare när timern uppdateras eller slutförs.

    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

När du kör föregående exempel börjar den räkna ned sekunderna från 10 till 0 och visar förloppet för konsolen. När heltiden (10 sekunder) har förflutit visas "Klar".

Se även