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


Események áttekintése

Az esemény olyan művelet, amelyre a kódban válaszolhat vagy "kezelhet". Az eseményeket általában egy felhasználói művelet, például az egérre kattintás vagy a kulcs lenyomása generálja, de programkód vagy a rendszer is létrehozhatja őket.

Az eseményvezérelt alkalmazások egy eseményre válaszul futtatnak kódot. Minden űrlap és vezérlőelem előre definiált eseménykészletet tesz elérhetővé, amelyekre válaszolhat. Ha az események egyike előjön, és van egy társított eseménykezelő, a rendszer meghívja a kezelőt, és futtatja a kódot.

Az objektum által kiváltott eseménytípusok eltérőek, de a legtöbb vezérlőben sok típus gyakori. A legtöbb objektum például olyan eseményt Click hoz létre, amely akkor merül fel, amikor egy felhasználó rá kattint.

Megjegyzés:

Sok esemény más eseményekkel is előfordul. Például a DoubleClick esemény során a MouseDown, MouseUpés Click események következnek be.

Az események létrehozásának és felhasználásának általános információi: Események kezelése és növelése a .NET-ben.

Meghatalmazottak és szerepkörük

A delegáltak a .NET-en belül gyakran használt osztályok, amelyek eseménykezelési mechanizmusokat építenek ki. A delegátok nagyjából egyenértékűek a Visual C++ és más objektumorientált nyelvekben gyakran használt függvénymutatókkal. A függvénymutatókkal ellentétben azonban a meghatalmazottak objektumorientáltak, típusbiztosak és biztonságosak. Ha a függvénymutató csak egy adott függvényre mutató hivatkozást tartalmaz, a meghatalmazott egy objektumra mutató hivatkozásból és az objektumon belüli egy vagy több metódusra mutató hivatkozásból áll.

Ez az eseménymodell meghatalmazottakat használja az eseményeknek a kezelésüket biztosító metódusokhoz való kötésére. A meghatalmazott egy kezelő metódus megadásával lehetővé teszi, hogy más osztályok regisztráljanak az eseményértesítésre. Az esemény bekövetkezésekor a meghatalmazott meghívja a kötött metódust. A delegáltak definiálásáról további információt lásd az Események kezelése és kiváltása című témakört.

A delegáltak egyetlen metódushoz vagy több metódushoz, más néven multicasthoz kapcsolhatók. Amikor egy eseményhez delegáltat hoz létre, általában csoportos delegációra szolgáló eseményt hoz létre. Ritka kivétel lehet egy olyan esemény, amely egy adott eljárást eredményez (például egy párbeszédpanel megjelenítését), amely nem ismétlődik logikailag eseményenként többször. A többszörös meghatalmazottak létrehozásáról további információt a Delegáltak egyesítése (Többszörös meghatalmazottak)című témakörben talál.

A multicast delegált fenntartja a hozzá kötött metódusok meghívási listáját. A csoportos küldési delegált egy Combine metódust támogat, amely hozzáad egy metódust a meghívási listához, és egy Remove metódust az eltávolításához.

Amikor az alkalmazás rögzít egy eseményt, a vezérlő az eseményt az adott esemény meghatalmazottjának meghívásával aktiválja. A meghatalmazott viszont meghívja a kötött metódust. A leggyakoribb esetben (csoportos küldési meghatalmazott) a meghatalmazott meghívja a híváslista minden kötött metódusát, amely egy-a-többhöz értesítést biztosít. Ez a stratégia azt jelenti, hogy a vezérlőnek nem kell fenntartania az eseményértesítés célobjektumainak listáját – a meghatalmazott kezeli az összes regisztrációt és értesítést.

A delegáltak emellett lehetővé teszik, hogy több esemény is ugyanahhoz a metódushoz legyen kötve, így lehetővé válik a több-az-egyhez értesítés is. Egy gombkattintásos esemény és egy menüparancsos kattintásos esemény például meghívhatja ugyanazt a delegáltat, amely ezután egyetlen metódust hív meg a különálló események ugyanúgy való kezeléséhez.

A meghatalmazottakhoz használt kötési mechanizmus dinamikus: a meghatalmazottak futásidőben bármilyen olyan metódushoz köthetők, amelynek aláírása megegyezik az eseménykezelőével. Ezzel a funkcióval konfigurálhatja vagy módosíthatja a kötött metódust egy feltételtől függően, és dinamikusan csatolhat egy eseménykezelőt egy vezérlőhöz.

Események a Windows Formsban

A Windows Forms eseményei a EventHandler<TEventArgs> kezelő metódusok meghatalmazottjával vannak deklarálva. Minden eseménykezelő két paramétert biztosít, amelyek lehetővé teszik az esemény megfelelő kezelését. Az alábbi példa egy Button vezérlőelem Click eseményének eseménykezelőjét mutatja be.

Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

End Sub
private void button1_Click(object sender, System.EventArgs e)
{

}

Az első paraméter(sender) az eseményt okozó objektumra mutató hivatkozást tartalmaz. A második paraméter egy e, a kezelt eseményre jellemző objektumot ad át. Az objektum tulajdonságaira (és néha módszereire) hivatkozva olyan információkat szerezhet be, mint például az egér helye az egéreseményekhez vagy az áthúzásos eseményekben átvitt adatokhoz.

Általában minden esemény egy eseménykezelőt hoz létre, amely a második paraméterhez eltérő eseményobjektum-típussal rendelkezik. Egyes eseménykezelők, például a MouseDown és MouseUp események objektumtípusa megegyezik a második paraméter objektumtípusával. Az ilyen típusú események esetében ugyanazt az eseménykezelőt használhatja mindkét esemény kezelésére.

Ugyanazt az eseménykezelőt is használhatja, hogy ugyanazt az eseményt kezelje a különböző vezérlők esetében. Ha például egy űrlap vezérlőinek RadioButton egy csoportja van, létrehozhat egyetlen eseménykezelőt az Click egyes RadioButtoneseményekhez. További információ: Vezérlőesemények kezelése.