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


Események (Visual Basic)

Bár előfordulhat, hogy egy Visual Studio-projektet egy sorozatban végrehajtott eljárásként vizualizál, 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 indíthat, és meghívhat egy, az eseményt kezelő eljárást. 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 hajt végre 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ény feltételei és fogalmai

Ez a szakasz a Visual Basic eseményekhez használt 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, az alábbi példához hasonlóan:

Event AnEvent(ByVal EventNumber As Integer)

Események emelése

Az esemény olyan, mint egy üzenet, amely arról tájékoztatja, hogy valami fontos történt. Az üzenet közvetítésének a neve az esemény növelése . A Visual Basic az alábbi példához hasonlóan az RaiseEvent utasítással hozhatja elő az eseményeket:

RaiseEvent AnEvent(EventNumber)

Az eseményeket annak az osztálynak, modulnak vagy struktúrának a hatókörén belül kell emelnie, ahol deklarálva vannak. Egy származtatott osztály például nem képes az alaposztálytól örökölt eseményeket generálni.

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 az esemény feladóinak példái.

Eseménykezelők

Az eseménykezelők olyan eljárások, amelyek a megfelelő események bekövetkezésekor lesznek meghívva. Eseménykezelőként bármely érvényes alrutint használhat 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.

Visual Basic egy szabványos elnevezési konvenciót használ az eseménykezelőkhöz, 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 elnevezett button1 gomb eseménye lesz elnevezve Sub button1_Click.

Megjegyzés

Azt javasoljuk, hogy ezt az elnevezési konvenciót 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 az vagy AddHandler az Handles 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ódot biztosít az eseménykezelők megadására. A kulcsszóval WithEvents deklarált objektum által generált eseményeket az eseményre vonatkozó utasítással Handles rendelkező bármely eljárás kezelheti, az alábbi példában látható módon:

' 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 és Handles nem kezelheti az eseményeket egy Structureadott helyről. Mindkét esetben használhatja az utasítást AddHandler az események kezelésére.

  • Változók tömbjei 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 záradék az események eseménykezelővel való társításának szabványos módja, az eseményeknek az eseménykezelőkkel való társítására korlátozódik a fordításkor.

Bizonyos esetekben, például az űrlapokhoz vagy vezérlőkhöz társított eseményekhez Visual Basic automatikusan kicsonog 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, Visual Basic létrehoz egy üres eseménykezelőt és egy változót WithEvents a parancsgombhoz, az alábbi kódhoz hasonlóan:

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 AddHandlerzáradéknál RemoveHandlerazonban nagyobb rugalmasságot Handles biztosít, így dinamikusan hozzáadhatja, eltávolíthatja és módosíthatja az eseményhez társított eseménykezelő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. Nem kell explicit módon megadnia a delegált osztályt, AddHandlermivel 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 a AddHandler. 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 megjelenít egy üzenetet.

Ezután az első eseménykezelő el lesz távolítva, és egy másik eseménykezelő van társítva az eseményhez. Az esemény ismételt felvetésekor 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 – azok az osztályok, amelyek az alaposztály jellemzőit öröklik – képesek kezelni az alaposztály által kiváltott eseményeket az Handles MyBase utasítással.

Alaposztály eseményeinek kezelése

  • Deklaráljon 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ályban lévő esemény 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 emelhet 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 Visual Basic Felsorolja az örökölt összetevők eseménykezelőivel kapcsolatos gyakori problémákat.
Események Áttekintést nyújt az eseménymodellről a .NET-keretrendszer.
Eseménykezelők létrehozása Windows Forms Ismerteti, hogyan használható Windows Forms objektumokhoz társított események.
Delegáltak Áttekintést nyújt a Visual Basic delegáltjairól.