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


Események (Visual Basic)

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 WithEvents objektumváltozóként. Vagyis nem deklarálhatja a változót Object– 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 WithEvents a megosztott események deklaratív kezelését. Hasonlóképpen nem használhatja WithEvents vagy Handles az Structure események kezelésére. Mindkét esetben használhatja az utasítást az AddHandler események kezelésére.

  • Változótömbök WithEvents nem 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
    
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.