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.