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.
Deklaruje událost definovanou uživatelem.
Syntaxe
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname[(parameterlist)] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname As delegatename _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Custom Event eventname As delegatename _
[ Implements implementslist ]
[ <attrlist> ] AddHandler(ByVal value As delegatename)
[ statements ]
End AddHandler
[ <attrlist> ] RemoveHandler(ByVal value As delegatename)
[ statements ]
End RemoveHandler
[ <attrlist> ] RaiseEvent(delegatesignature)
[ statements ]
End RaiseEvent
End Event
Součástky
| Část | Popis |
|---|---|
attrlist |
Volitelný. Seznam atributů, které se vztahují na tuto událost Více atributů je odděleno čárkami.
Seznam atributů musíte uzavřít do úhlových závorek ("<" a ">"). |
accessmodifier |
Volitelný. Určuje, k jakému kódu má přístup k události. Může to být jedna z následujících možností: - Veřejný – libovolný kód, který má přístup k prvku, který ho deklaruje, má přístup. - Chráněno – přístup k němu má pouze kód v rámci své třídy nebo odvozené třídy. - Přítel – přístup k němu má jenom kód ve stejném sestavení. - Soukromé – pouze kód v elementu, který deklaruje, že k němu má přístup. - Chráněný kód pouze friend ve třídě události, odvozené třídě nebo stejném sestavení může přistupovat k němu. - K privátnímu chráněnému kódu ve třídě události nebo odvozené třídě ve stejném sestavení má přístup. |
Shared |
Volitelný. Určuje, že tato událost není přidružena ke konkrétní instanci třídy nebo struktury. |
Shadows |
Volitelný. Označuje, že tato událost předefinuje a skryje identicky pojmenovaný programovací prvek nebo sadu přetížených prvků v základní třídě. Můžete stínovat jakýkoli druh deklarovaného prvku s jakýmkoli jiným druhem. Stínovaný element není k dispozici v odvozené třídě, která ho stínuje, s výjimkou místa, kde je prvek stínování nepřístupný. Pokud Private například element stínuje element základní třídy, kód, který nemá oprávnění pro přístup Private k elementu, místo toho přistupuje k elementu základní třídy. |
eventname |
Povinné. Název události; se řídí standardními zásadami vytváření názvů proměnných. |
parameterlist |
Volitelný. Seznam místních proměnných, které představují parametry této události Seznam parametrů musíte uzavřít do závorek. |
Implements |
Volitelný. Označuje, že tato událost implementuje událost rozhraní. |
implementslist |
Požadováno, pokud Implements je zadáno.
Sub Seznam implementovaných postupů Více procedur je odděleno čárkami:implementovanéprocedure [ , implementovanéprocedure ... ] Každá z nich implementedprocedure má následující syntaxi a části:interface.definedname- interface -Požadovaný. Název rozhraní, které tento postup obsahuje třídu nebo strukturu implementuje.- Definedname -Požadovaný. Název, kterým je procedura definována v interface. To nemusí být stejné jako name, název, který tento postup používá k implementaci definované procedury. |
Custom |
Povinné. Události deklarované jako Custom musí definovat vlastní AddHandlerobjekty , RemoveHandlera RaiseEvent přístupové objekty. |
delegatename |
Volitelný. Název delegáta, který určuje podpis obslužné rutiny události. |
AddHandler |
Povinné. Deklaruje přístupový objekt AddHandler , který určuje příkazy, které se mají provést při přidání obslužné rutiny události, buď explicitně pomocí AddHandler příkazu, nebo implicitně pomocí Handles klauzule. |
End AddHandler |
Povinné. Ukončí AddHandler blok. |
value |
Povinné. Název parametru. |
RemoveHandler |
Povinné. Deklaruje přístupový objekt RemoveHandler , který určuje příkazy, které se mají provést při odebrání obslužné rutiny události pomocí RemoveHandler příkazu. |
End RemoveHandler |
Povinné. Ukončí RemoveHandler blok. |
RaiseEvent |
Povinné. Deklaruje přístupový objekt RaiseEvent , který určuje příkazy, které se mají provést při vyvolání události pomocí RaiseEvent příkazu. Obvykle se tím vyvolá seznam delegátů, které AddHandler spravuje správce a RemoveHandler přístupové objekty. |
End RaiseEvent |
Povinné. Ukončí RaiseEvent blok. |
delegatesignature |
Povinné. Seznam parametrů, které odpovídají parametrům vyžadovaným delegátem delegatename
Seznam parametrů musíte uzavřít do závorek. |
statements |
Volitelný. Příkazy, které obsahují těla AddHandler, RemoveHandlera RaiseEvent metody. |
End Event |
Povinné. Ukončí Event blok. |
Poznámky
Jakmile je událost deklarována, použijte RaiseEvent příkaz k vyvolání události. Typická událost může být deklarována a vyvolána, jak je znázorněno v následujících fragmentech:
Public Class EventSource
' Declare an event.
Public Event LogonCompleted(ByVal UserName As String)
Sub CauseEvent()
' Raise an event on successful logon.
RaiseEvent LogonCompleted("AustinSteele")
End Sub
End Class
Poznámka:
Argumenty události můžete deklarovat stejně jako argumenty procedur s následujícími výjimkami: události nemohou mít pojmenované argumenty, ParamArray argumenty nebo Optional argumenty. Události nemají vrácené hodnoty.
Pokud chcete zpracovat událost, musíte ji přidružit k podprogramu obslužné rutiny události pomocí Handles příkazu nebo AddHandler příkazu. Podpisy podprogramu a události se musí shodovat. Ke zpracování sdílené události je nutné použít AddHandler příkaz.
Můžete použít Event pouze na úrovni modulu. To znamená, že kontext deklarace události musí být třída, struktura, modul nebo rozhraní a nemůže to být zdrojový soubor, obor názvů, procedura nebo blok. Další informace naleznete v tématu Kontexty deklarace a výchozí úrovně přístupu.
Ve většině případů můžete k deklarování událostí použít první syntaxi v části Syntaxe tohoto tématu. Některé scénáře však vyžadují větší kontrolu nad podrobným chováním události. Poslední syntaxe v části Syntaxe tohoto tématu, která používá Custom klíčové slovo, poskytuje tento ovládací prvek tím, že umožňuje definovat vlastní události. Ve vlastní události přesně určíte, co se stane, když kód přidá nebo odebere obslužnou rutinu události do události nebo z události nebo když kód vyvolá událost. Příklady naleznete v tématu Postupy: Deklarace vlastních událostí pro zachování paměti a postupy: Deklarace vlastních událostí, aby se zabránilo blokování.
Příklad
Následující příklad používá události k odpočítání sekund od 10 do 0. Kód znázorňuje několik metod, vlastností a příkazů souvisejících s událostmi. To zahrnuje příkaz RaiseEvent .
Třída, která vyvolá událost, je zdroj události a metody, které událost zpracovávají, jsou obslužné rutiny událostí. Zdroj událostí může mít více obslužných rutin pro události, které generuje. Když třída vyvolá událost, tato událost je vyvolána u každé třídy, která se rozhodla zpracovat události pro danou instanci objektu.
Příklad také používá formulář (Form1) s tlačítkem (Button1) a textovým polem (TextBox1). Po kliknutí na tlačítko se v prvním textovém poli zobrazí odpočítávání od 10 do 0 sekund. Pokud uplynulo celé období (10 sekund), zobrazí se v prvním textovém poli text "Hotovo".
Kód pro Form1 určuje počáteční a terminálové stavy formuláře. Obsahuje také kód spuštěný při vyvolání událostí.
Pokud chcete tento příklad použít, otevřete nový projekt Windows Forms. Pak přidejte tlačítko s názvem Button1 a textové pole pojmenované TextBox1 do hlavního formuláře s názvem Form1. Potom klikněte pravým tlačítkem myši na formulář a kliknutím na Zobrazit kód otevřete editor kódu.
Přidejte proměnnou WithEvents do oddílu Form1 deklarací třídy:
Public Class TimerExample
Private WithEvents mTimer As TimerState
Do kódu pro Form1. Nahraďte všechny duplicitní postupy, které mohou existovat, například Form_Load nebo Button_Click.
Public Sub StartCountdownExample()
mTimer = New TimerState()
mTimer.StartCountdown(10.0, 1.0)
End Sub
Private Sub mTimer_UpdateTime(ByVal Countdown As Double) Handles mTimer.UpdateTime
Console.WriteLine("Time remaining: " & Format(Countdown, "##0.0") & " seconds")
End Sub
Private Sub mTimer_Finished() Handles mTimer.Finished
Console.WriteLine("Done")
End Sub
End Class
Public Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim SoFar As Double = 0
Do While SoFar < Duration
System.Threading.Thread.Sleep(CInt(Increment * 1000))
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
Loop
RaiseEvent Finished()
End Sub
End Class
Stisknutím klávesy F5 spusťte předchozí příklad a klikněte na tlačítko s popiskem Start. První textové pole začne počítat sekundy. Pokud uplynulo celé období (10 sekund), zobrazí se v prvním textovém poli text "Hotovo".
Poznámka:
Metoda My.Application.DoEvents nezpracovává události stejným způsobem jako formulář. Pokud chcete formulář povolit zpracování událostí přímo, můžete použít vícevláknové zpracování. Další informace najdete v tématu Spravované vlákno.