RaiseEvent utasítás

Modulszinten deklarált eseményt aktivál egy osztályon, űrlapon vagy dokumentumban.

Syntax

RaiseEvent eventname[( argumentlist )]  

Részek

eventname
Szükséges. Az eseményindító neve.

argumentlist
Opcionális. Változók, tömbök vagy kifejezések vesszőkkel tagolt listája. Az argumentlist argumentumot zárójelek közé kell tenni. Ha nincsenek argumentumok, a zárójeleket ki kell hagyni.

Megjegyzések

A kötelező eventname egy, a modulban deklarált esemény neve. A Visual Basic változó elnevezési konvencióit követi.

Ha az esemény nincs deklarálva abban a modulban, amelyben az elő van állítva, hiba történik. Az alábbi kódrészlet egy eseménydeklarációt és egy eljárást mutat be, amelyben az esemény létre van hozva.

' 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

A RaiseEvent modulban explicit módon nem deklarált események nem állíthatók elő. Például minden űrlap örököl egy eseményt ClickSystem.Windows.Forms.Form, és nem hozható létre RaiseEvent származtatott formában. Ha az űrlapmodulban deklarál egy Click eseményt, az árnyékot képez az űrlap saját Click eseményén. A metódus meghívásával továbbra is meghívhatja az űrlap eseményét ClickOnClick .

A Visual Basicben definiált esemény alapértelmezés szerint a kapcsolatok létrehozásának sorrendjében emeli ki az eseménykezelőket. Mivel az események ByRef lehetnek paraméterek, a későn csatlakozó folyamatok olyan paramétereket kaphatnak, amelyeket egy korábbi eseménykezelő módosított. Az eseménykezelők végrehajtása után a rendszer visszaadja a vezérlőt az eseményt generáló alrutinnak.

Feljegyzés

A nem megosztott események nem hozhatók létre annak az osztálynak a konstruktorán belül, amelyben deklarálva vannak. Bár az ilyen események nem okoznak futásidejű hibákat, előfordulhat, hogy a társított eseménykezelők nem kapják el őket. Shared A módosítóval megosztott eseményt hozhat létre, ha egy konstruktorból kell eseményt létrehoznia.

Feljegyzés

Az események alapértelmezett viselkedését egyéni esemény definiálásával módosíthatja. Egyéni események esetén az RaiseEvent utasítás meghívja az esemény tartozékát RaiseEvent . Az egyéni eseményekről további információt az Eseményutasítás című témakörben talál.

1. példa

Az alábbi példa események használatával számolja le a másodperceket 10 és 0 között. A kód számos eseményhez kapcsolódó metódust, tulajdonságot és utasítást mutat be, beleértve az utasítást RaiseEvent is.

Az eseményt jelölő osztály az eseményforrás, az eseményt feldolgozó metódusok pedig az eseménykezelők. Az eseményforrásnak több kezelője is lehet az általa létrehozott eseményekhez. Amikor az osztály előhozta az eseményt, az esemény minden olyan osztályon létrejön, amely úgy döntött, hogy kezeli az objektum adott példányának eseményeit.

A példa egy űrlapot (Form1) is használ egy gombot (Button1) és egy szövegdobozt (TextBox1). A gombra kattintva az első szövegmező 10 és 0 másodperc közötti visszaszámlálást jelenít meg. Ha a teljes idő (10 másodperc) eltelt, az első szövegmezőben a "Kész" szöveg jelenik meg.

A kód Form1 megadja az űrlap kezdeti és terminálállapotait. Az események létrehozásakor végrehajtott kódot is tartalmazza.

A példa használatához nyisson meg egy új Windows-alkalmazásprojektet, adjon hozzá egy gombot és Button1 egy, a fő űrlaphoz elnevezett TextBox1 szövegmezőt Form1. Ezután kattintson a jobb gombbal az űrlapra, majd a Kód megtekintése parancsra a Kódszerkesztő megnyitásához.

Adjon hozzá egy változót WithEvents az osztály deklarációs szakaszához Form1 .

Private WithEvents mText As TimerState

2. példa

Adja hozzá a következő kódot a következő kódhoz Form1: Cserélje le az esetlegesen előforduló ismétlődő eljárásokat, például Form_Loada .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

Az előző példa futtatásához nyomja le az F5 billentyűt, majd kattintson a Start feliratú gombra. Az első szövegdoboz elkezdi visszaszámlálni a másodperceket. Ha a teljes idő (10 másodperc) eltelt, az első szövegmezőben a "Kész" szöveg jelenik meg.

Feljegyzés

A My.Application.DoEvents metódus nem ugyanúgy dolgozza fel az eseményeket, mint az űrlap. Ha lehetővé szeretné tenni, hogy az űrlap közvetlenül kezelje az eseményeket, többszálú elemet használhat. További információ: Felügyelt szálkezelés.

Lásd még