Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Událost je akce, na kterou můžete v kódu odpovědět nebo na ni "zpracovat". Události se obvykle generují akcí uživatele, například kliknutím myši nebo stisknutím klávesy, ale mohou být generovány také programovým kódem nebo systémem.
Aplikace řízené událostmi spouštějí kód v reakci na událost. Každý formulář a ovládací prvek zveřejňuje předdefinovanou sadu událostí, na které můžete reagovat. Pokud je vyvolána jedna z těchto událostí a existuje přidružená obslužná rutina události, vyvolá se obslužná rutina a spustí se kód.
Typy událostí vyvolaných objektem se liší, ale většina ovládacích prvků se běžně používá u mnoha typů. Například většina objektů má Click událost, která se vyvolá, když na ni uživatel klikne.
Poznámka:
Mnoho událostí se koná zároveň s jinými událostmi. Například během události DoubleClick dochází k událostem MouseDown, MouseUpa Click.
Obecné informace o vyvolání a využívání události naleznete v tématu Zpracování a vyvolávání událostí v .NET.
Delegáti a jejich role
Delegáti jsou třídy, které se běžně používají v rozhraní .NET k vytváření mechanismů zpracování událostí. Delegáti zhruba odpovídají ukazatelům na funkce, běžně používaným v jazyce Visual C++ a dalších objektově orientovaných jazycích. Na rozdíl od ukazatelů na funkce jsou však delegáti objektově orientovaní, typově bezpeční a zabezpečení. Pokud ukazatel funkce obsahuje pouze odkaz na konkrétní funkci, delegát se skládá z odkazu na objekt a odkazy na jednu nebo více metod v rámci objektu.
Tento model událostí používá delegáty k vytvoření vazby událostí na metody, které se používají k jejich zpracování. Delegát umožňuje ostatním třídám registrovat se pro oznámení událostí zadáním obslužné metody. Když dojde k události, delegát volá vázanou metodu. Další informace o definování delegátů naleznete v tématu Zpracování a vyvolávání událostí.
Delegáti mohou být vázáni na jednu metodu nebo na více metod, které se označují jako vícesměrové vysílání. Při vytváření delegáta pro událost obvykle vytvoříte vícesměrovou událost. Výjimkou může být událost, která vede ke konkrétnímu postupu (například zobrazení dialogového okna), který by logicky neopakovala vícekrát na událost. Informace o tom, jak vytvořit delegáta vícesměrového vysílání, naleznete v tématu Jak kombinovat delegáty (vícesměrové delegáty).
Delegát vícesměrového vysílání udržuje seznam volání metod, ke kterým je vázán. Delegát typu multicast podporuje metodu Combine pro přidání metody do seznamu vyvolání a metodu Remove pro její odstranění.
Když aplikace zaznamená událost, ovládací prvek vyvolá událost vyvoláním delegáta pro danou událost. Delegát zase volá vázanou metodu. V nejběžnějším případě (delegát vícesměrového vysílání) delegát volá každou vázanou metodu v seznamu volání, která poskytuje oznámení 1:N. Tato strategie znamená, že ovládací prvek nemusí udržovat seznam cílových objektů pro oznámení události – delegát zpracovává veškerou registraci a oznámení.
Delegáti také umožňují vázání několika událostí na stejnou metodu, což umožňuje notifikaci ve stylu „mnoho na jednoho“. Například událost kliknutí na tlačítko a událost menu-command–click může vyvolat stejný delegát, který pak volá jednu metodu pro zpracování těchto samostatných událostí stejným způsobem.
Mechanismus vazby používaný s delegáty je dynamický: delegát může být za běhu vázán na libovolnou metodu, jejíž podpis odpovídá obslužné metodě události. Pomocí této funkce můžete nastavit nebo změnit vázanou metodu v závislosti na podmínce a dynamicky připojit obslužnou rutinu události k ovládacímu prvku.
Události ve Windows Forms
Události ve Windows Forms jsou deklarovány delegátem EventHandler<TEventArgs> pro metody obslužné rutiny. Každá obslužná rutina události poskytuje dva parametry, které umožňují správně zpracovat událost. Následující příklad ukazuje obslužnou rutinu události ovládacího prvku Button pro událost Click.
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)
{
}
První parametr,sender
, poskytuje odkaz na objekt, který vyvolal událost. Druhý parametr , e
předá objekt specifický pro událost, která se zpracovává. Odkazováním na vlastnosti objektu (a někdy i jeho metody) můžete získat informace, například o umístění myši u událostí myši nebo o datech, která se přenášejí v událostech přetažení.
Každá událost obvykle vytvoří obslužnou rutinu události s jiným typem objektu události pro druhý parametr. Některé obslužné rutiny událostí, například obslužné rutiny MouseDown a MouseUp událostí, mají pro druhý parametr stejný typ objektu. U těchto typů událostí můžete ke zpracování obou událostí použít stejnou obslužnou rutinu události.
Stejnou obslužnou rutinu události můžete použít také ke zpracování stejné události pro různé ovládací prvky. Pokud máte například skupinu ovládacích prvků RadioButton ve formuláři, můžete pro událost Click každého RadioButton
vytvořit jednu společnou obslužnou rutinu. Další informace naleznete v tématu Zpracování řídicí události.
Související obsah
.NET Desktop feedback