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_Load
a .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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: