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
Obligatoriska. 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.

Kommentarer

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.

Kommentar

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.

Kommentar

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.

I exemplet används också ett formulär (Form1) med en knapp (Button1) och en textruta (TextBox1). När du klickar på knappen visar den första textrutan en nedräkning från 10 till 0 sekunder. När heltiden (10 sekunder) har förflutit visar den första textrutan "Klar".

Koden för Form1 anger formulärets inledande tillstånd och terminaltillstånd. Den innehåller också den kod som körs när händelser genereras.

Om du vill använda det här exemplet öppnar du ett nytt Windows-programprojekt, lägger till en knapp med namnet Button1 och en textruta med namnet TextBox1 i huvudformuläret med namnet Form1. Högerklicka sedan på formuläret och klicka på Visa kod för att öppna kodredigeraren.

Lägg till en WithEvents variabel i deklarationsavsnittet i Form1 klassen.

Private WithEvents mText As TimerState

Exempel 2

Lägg till följande kod i koden för Form1. Ersätt eventuella duplicerade procedurer som kan finnas, till exempel Form_Load, eller 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

Tryck på F5 för att köra föregående exempel och klicka på knappen med etiketten Start. Den första textrutan börjar räkna ned sekunderna. När heltiden (10 sekunder) har förflutit visar den första textrutan "Klar".

Kommentar

Metoden My.Application.DoEvents bearbetar inte händelser på exakt samma sätt som formuläret gör. Om du vill att formuläret ska kunna hantera händelserna direkt kan du använda multitrådning. Mer information finns i Hanterad trådning.

Se även