Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Bár előfordulhat, hogy egy Visual Studio-projektet olyan eljárások sorozataként vizualizál, amelyek sorozatban futnak, a valóságban a legtöbb program eseményvezérelt– vagyis a végrehajtás folyamatát eseményeknek nevezett külső események határozzák meg.
Az esemény egy olyan jelzés, amely tájékoztatja az alkalmazást arról, hogy valami fontos történt. Ha például egy felhasználó egy űrlap vezérlőelemére kattint, az űrlap eseményt Click hozhat létre, és meghívhat egy eljárást, amely kezeli az eseményt. Az események lehetővé teszik a különböző tevékenységek közötti kommunikációt is. Tegyük fel például, hogy az alkalmazás a fő alkalmazástól elkülönítve végez rendezési feladatot. Ha egy felhasználó megszakítja a rendezést, az alkalmazás elküldhet egy megszakítási eseményt, amely a rendezési folyamat leállítására utasítja.
Eseményfeltételek és -fogalmak
Ez a szakasz a Visual Basic eseményeivel kapcsolatos kifejezéseket és fogalmakat ismerteti.
Események deklarálása
Az osztályokon, struktúrákon, modulokon és interfészeken belüli eseményeket a Event kulcsszó használatával deklarálhatja, ahogyan az alábbi példában is látható:
Event AnEvent(ByVal EventNumber As Integer)
Események emelése
Az esemény olyan, mint egy üzenet, amely bejelenti, hogy valami fontos történt. Az üzenet közvetítésének neve az esemény indítása. A Visual Basicben az RaiseEvent utasítással eseményeket emelhet ki, ahogyan az alábbi példában is látható:
RaiseEvent AnEvent(EventNumber)
Az eseményeket annak az osztálynak, modulnak vagy struktúrának a hatókörén belül kell előhozni, ahol deklarálva vannak. Egy származtatott osztály például nem tudja előteremteni az alaposztálytól örökölt eseményeket.
Esemény feladói
Minden olyan objektum, amely képes eseményt emelni, esemény feladója, más néven eseményforrás. Az űrlapok, vezérlők és felhasználó által definiált objektumok példaként szerepelnek az esemény feladóira.
Eseménykezelők
Az eseménykezelők olyan eljárások, amelyeket egy megfelelő esemény bekövetkezésekor hívunk meg. Bármely érvényes alrutint használhat eseménykezelőként egyező aláírással. A függvényt azonban nem használhatja eseménykezelőként, mert nem tud értéket visszaadni az eseményforrásnak.
A Visual Basic egy szabványos elnevezési konvenciót használ az eseménykezelők számára, amely egyesíti az esemény feladójának nevét, egy aláhúzásjelet és az esemény nevét. Például egy Click nevű gomb button1 eseménye Sub button1_Click lesz elnevezve.
Megjegyzés:
Azt javasoljuk, hogy ezt az elnevezési konvenciókat használja az eseménykezelők saját eseményekhez való definiálásakor, de ez nem kötelező; bármilyen érvényes alrutinnevet használhat.
Események társítása eseménykezelőkkel
Mielőtt egy eseménykezelő használhatóvá válik, először társítania kell azt egy eseményhez vagy a Handles vagy a AddHandler utasítás használatával.
WithEvents és a Handles záradék
Az WithEvents utasítás és Handles a záradék deklaratív módon adja meg az eseménykezelőket. A kulcsszóval WithEvents deklarált objektum által kiváltott eseményeket az eseményre vonatkozó utasítással Handles rendelkező bármely eljárás kezelheti, ahogyan az alábbi példában látható:
' Declare a WithEvents variable.
Dim WithEvents EClass As New EventClass
' Call the method that raises the object's events.
Sub TestEvents()
EClass.RaiseEvents()
End Sub
' Declare an event handler that handles multiple events.
Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent
MsgBox("Received Event.")
End Sub
Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
Az WithEvents utasítás és a Handles záradék gyakran a legjobb választás az eseménykezelők számára, mivel az általuk használt deklaratív szintaxis megkönnyíti az eseménykezelést a kód, az olvasás és a hibakeresés szempontjából. Vegye figyelembe azonban a változók használatára WithEvents vonatkozó alábbi korlátozásokat:
Nem használhat változót
WithEventsobjektumváltozóként. Vagyis nem deklarálhatja a változótObject– a változó deklarálásakor meg kell adnia az osztály nevét.Mivel a megosztott események nincsenek osztálypéldányokhoz kötve, nem használhatja
WithEventsa megosztott események deklaratív kezelését. Hasonlóképpen nem használhatjaWithEventsvagyHandlesazStructureesemények kezelésére. Mindkét esetben használhatja az utasítást azAddHandleresemények kezelésére.Változótömbök
WithEventsnem hozhatók létre.
WithEvents a változók lehetővé teszik, hogy egy eseménykezelő egy vagy több eseményt kezeljen, vagy egy vagy több eseménykezelő kezelje ugyanazt az eseménytípust.
Bár a Handles rész az események kezelőkkel való társításának megszokott módja, ez csak fordítási időben teszi lehetővé az események eseménykezelőkkel való társítását.
Bizonyos esetekben, például az űrlapokhoz vagy vezérlőkhöz társított események esetén a Visual Basic automatikusan kicsonkol egy üres eseménykezelőt, és társítja azt egy eseményhez. Ha például tervező módban duplán kattint egy parancsgombra egy űrlapon, a Visual Basic létrehoz egy üres eseménykezelőt és egy változót WithEvents a parancsgombhoz, ahogyan az alábbi kódban is látható:
Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click() Handles Button1.Click
End Sub
AddHandler és RemoveHandler
Az AddHandler utasítás hasonló ahhoz a Handles záradékhoz, amelyben mindkettő lehetővé teszi egy eseménykezelő megadását. A AddHandler, RemoveHandler használata nagyobb rugalmasságot biztosít, mint a Handles záradék, lehetővé téve az eseményhez kapcsolt eseménykezelő dinamikus hozzáadását, eltávolítását és módosítását. Ha egy struktúra megosztott eseményeit vagy eseményeit szeretné kezelni, akkor a következőt kell használnia AddHandler:
AddHandler Két argumentumot vesz fel: egy esemény feladójától származó esemény nevét, például egy vezérlőt, és egy delegáltnak kiértékelt kifejezést. A delegálási AddHandlerosztályt nem kell explicit módon megadnia, mivel az AddressOf utasítás mindig a meghatalmazottra mutató hivatkozást ad vissza. Az alábbi példa egy eseménykezelőt társít egy objektum által létrehozott eseményhez:
AddHandler Obj.XEvent, AddressOf Me.XEventHandler
RemoveHandler, amely leválaszt egy eseményt egy eseménykezelőről, ugyanazt a szintaxist használja, mint AddHandlera . Például:
RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler
Az alábbi példában egy eseménykezelő társítva van egy eseményhez, és az esemény létre lesz hozva. Az eseménykezelő elkapja az eseményt, és megjelenik egy üzenet.
Ezután az első eseménykezelő el lesz távolítva, és egy másik eseménykezelő van társítva az eseményhez. Amikor az esemény ismét előjön, egy másik üzenet jelenik meg.
Végül a második eseménykezelő el lesz távolítva, és az esemény harmadik alkalommal lesz előállítva. Mivel már nincs eseménykezelő társítva az eseményhez, nem történik művelet.
Module Module1
Sub Main()
Dim c1 As New Class1
' Associate an event handler with an event.
AddHandler c1.AnEvent, AddressOf EventHandler1
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler1
' Now associate a different event handler with the event.
AddHandler c1.AnEvent, AddressOf EventHandler2
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler2
' This event will not be handled.
c1.CauseTheEvent()
End Sub
Sub EventHandler1()
' Handle the event.
MsgBox("EventHandler1 caught event.")
End Sub
Sub EventHandler2()
' Handle the event.
MsgBox("EventHandler2 caught event.")
End Sub
Public Class Class1
' Declare an event.
Public Event AnEvent()
Sub CauseTheEvent()
' Raise an event.
RaiseEvent AnEvent()
End Sub
End Class
End Module
Alaposztályból örökölt események kezelése
A származtatott osztályok – az alaposztálytól jellemzőket öröklő osztályok – az utasítással kezelhetik az Handles MyBase alaposztály által kiváltott eseményeket.
Alaposztály eseményeinek kezelése
Deklarálhat egy eseménykezelőt a származtatott osztályban úgy, hogy hozzáad egy
Handles MyBase.eseménynév-utasítást az eseménykezelő eljárás deklarációs sorához, ahol az eseménynév a kezelt alaposztály eseményének neve. Például:Public Class BaseClass Public Event BaseEvent(ByVal i As Integer) ' Place methods and properties here. End Class Public Class DerivedClass Inherits BaseClass Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent ' Place code to handle events from BaseClass here. End Sub End Class
Kapcsolódó szakaszok
| Cím | Leírás |
|---|---|
| Útmutató: Események deklarálása és növelése | Részletes leírást nyújt arról, hogyan deklarálhat és kezdeményezhet eseményeket egy osztály számára. |
| Útmutató: Események kezelése | Bemutatja, hogyan írhat eseménykezelő eljárást. |
| Útmutató: Egyéni események deklarálása a blokkolás elkerülése érdekében | Bemutatja, hogyan definiálhat olyan egyéni eseményt, amely lehetővé teszi az eseménykezelők aszinkron meghívását. |
| Útmutató: Egyéni események deklarálása a memória megőrzéséhez | Bemutatja, hogyan definiálhat olyan egyéni eseményt, amely csak az esemény kezelésekor használ memóriát. |
| Örökölt eseménykezelők hibaelhárítása a Visual Basic | Az örökölt összetevők eseménykezelőivel kapcsolatos gyakori problémákat sorolja fel. |
| Események | Áttekintést nyújt az eseménymodellről a .NET-keretrendszerben. |
| Eseménykezelők létrehozása a Windows Forms | Bemutatja, hogyan kezelhetők a Windows Forms objektumokhoz társított események. |
| meghatalmazottak | Áttekintést nyújt a Delegáltakról a Visual Basicben. |