Event – příkaz
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 |
Nepovinné. 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 |
Nepovinné. 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 |
Nepovinné. Určuje, že tato událost není přidružena ke konkrétní instanci třídy nebo struktury. |
Shadows |
Nepovinné. 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 |
Nepovinné. 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 |
Nepovinné. 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í AddHandler objekty , RemoveHandler a RaiseEvent přístupové objekty. |
delegatename |
Nepovinné. 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 |
Nepovinné. Příkazy, které obsahují těla AddHandler , RemoveHandler a 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 model 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:
Private WithEvents mText As TimerState
Do kódu pro Form1
. Nahraďte všechny duplicitní postupy, které mohou existovat, například Form_Load
nebo Button_Click
.
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Private Sub mText_ChangeText() Handles mText.Finished
TextBox1.Text = "Done"
End Sub
Private Sub mText_UpdateTime(ByVal Countdown As Double
) Handles mText.UpdateTime
TextBox1.Text = Format(Countdown, "##0.0")
' Use DoEvents to allow the display to refresh.
My.Application.DoEvents()
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Dim SoFar As Double = 0
Do While ElapsedTime < Duration
If ElapsedTime > SoFar + Increment Then
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
End If
ElapsedTime = DateAndTime.Timer - Start
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.