Megosztás a következőn keresztül:


RaiseEvent utasítás

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

Szemantika

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.

Megjegyzé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.

Megjegyzé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 időzítőt mutat be, amely 10-től 0 másodpercig számol, és megjeleníti a konzol felé történő előrehaladást. Amikor a visszaszámlálás befejeződik, megjelenik a "Kész".

Deklaráljon egy változót WithEvents az osztályban az időzítő eseményeinek kezeléséhez:

Public Class TimerExample
    Private WithEvents mTimer As TimerState

2. példa

Adja hozzá az alábbi kódot az eseménykezelők és az időzítő logikájának implementálásához. Ez a példa bemutatja, hogyan értesítheti az eseménykezelőket az RaiseEvent időzítő frissítésekor vagy befejeződésekor az utasítás használatával.

    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

Az előző példa futtatásakor a rendszer elkezdi számlálni a másodperceket 10-ről 0-ra, és megjeleníti a konzol felé történő előrehaladást. Amikor a teljes idő (10 másodperc) eltelt, megjelenik a "Kész".

Lásd még