Event – příkaz
Deklaruje uživatelsky definovanou událost.
Syntax
[ <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části
| Část | Popis |
|---|---|
attrlist |
Nepovinný parametr. Seznam atributů, které se vztahují na tuto událost. Více atributů je odděleno čárkami. Seznam atributů musíte uzavřít do lomených závorek (" < " a " > "). |
accessmodifier |
Nepovinný parametr. Určuje, jaký kód má mít přístup k události. Může to být jedna z následujících: - Public– jakýkoliv kód, který má přístup k prvku, který ho deklaruje, má k němu přístup. - Protected– k němu má přístup jenom kód v rámci své třídy nebo odvozené třídy. - Friend– k němu má přístup jenom kód ve stejném sestavení. - Private– pouze kód v prvku, který ho deklaruje, má k němu přístup. - Chráněnýkód jenom pro přítele ve třídě události, odvozená třída nebo stejné sestavení k němu má přístup. - Soukromý chráněný– kód pouze ve třídě události nebo v odvozené třídě ve stejném sestavení má k němu přístup. |
Shared |
Nepovinný parametr. Určuje, že tato událost není přidružena ke konkrétní instanci třídy nebo struktury. |
Shadows |
Nepovinný parametr. Označuje, že tato událost znovu deklaruje a skryje identicky pojmenovaný programový prvek nebo sadu přetížených prvků v základní třídě. Můžete vystínovat jakýkoliv druh deklarovaného prvku s jakýmkoli jiným druhem. Stínovaný element není k dispozici v odvozené třídě, která ho nastínuje, s výjimkou, kde není k dispozici stínový element. Například pokud Private prvek nastínuje element základní třídy, kód, který nemá oprávnění pro přístup k elementu, přistupuje k Private elementu základní třídy. |
eventname |
Povinná hodnota. Název události; Následují standardní zásady vytváření názvů proměnných. |
parameterlist |
Nepovinný parametr. Seznam místních proměnných, které reprezentují parametry této události. Seznam parametrů musí být uzavřen v závorkách. |
Implements |
Nepovinný parametr. Označuje, že tato událost implementuje událost rozhraní. |
implementslist |
Vyžaduje Implements se, pokud je zadaný. Seznam Sub implementovaných procedur. Více postupů je odděleno čárkami:implementedprocedure [, implementedprocedure ...] Každá implementedprocedure z nich má následující syntaxi a části:interface.definedname- interface Požadovanou. Název rozhraní, které tato procedura obsahuje, implementuje třídu nebo strukturu.- Definedname Požadovanou. Název, podle kterého je procedura definovaná interface . To nemusí být stejné jako name název, který tento postup používá k implementaci definované procedury. |
Custom |
Povinná hodnota. Události deklarované jako Custom musí definovat vlastní AddHandler , RemoveHandler a RaiseEvent přistupující objekty. |
delegatename |
Nepovinný parametr. Název delegáta, který určuje signaturu obslužné rutiny události. |
AddHandler |
Povinná hodnota. Deklaruje AddHandler přistupující objekt, který určuje příkazy, které mají být provedeny při přidání obslužné rutiny události, buď explicitně pomocí AddHandler příkazu nebo implicitně pomocí Handles klauzule. |
End AddHandler |
Povinná hodnota. Ukončí AddHandler blok. |
value |
Povinná hodnota. Názvy parametrů. |
RemoveHandler |
Povinná hodnota. Deklaruje RemoveHandler přistupující objekt, který určuje příkazy, které mají být provedeny při odebrání obslužné rutiny události pomocí RemoveHandler příkazu. |
End RemoveHandler |
Povinná hodnota. Ukončí RemoveHandler blok. |
RaiseEvent |
Povinná hodnota. Deklaruje RaiseEvent přistupující objekt, který určuje příkazy, které mají být provedeny při vyvolání události pomocí RaiseEvent příkazu. Obvykle vyvolá seznam delegátů udržovaných pomocí AddHandler RemoveHandler přístupových objektů a. |
End RaiseEvent |
Povinná hodnota. Ukončí RaiseEvent blok. |
delegatesignature |
Povinná hodnota. Seznam parametrů, které odpovídají parametrům vyžadovaným delegatename delegátem. Seznam parametrů musí být uzavřen v závorkách. |
statements |
Nepovinný parametr. Příkazy, které obsahují těla AddHandler RemoveHandler metod, a RaiseEvent . |
End Event |
Povinná hodnota. Ukončí Event blok. |
Poznámky
Po deklaraci události použijte RaiseEvent příkaz k vyvolání události. Typickou 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 lze 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 neobsahují návratové hodnoty.
Chcete-li zpracovat událost, je nutné ji přidružit k podrutině obslužné rutiny události pomocí Handles AddHandler příkazu nebo. Signatury subrutiny a události se musí shodovat. Chcete-li zpracovat sdílenou událost, musíte použít AddHandler příkaz.
Můžete použít Event pouze na úrovni modulu. To znamená, že kontext deklarace pro událost musí být třída, struktura, modul nebo rozhraní a nemůže se jednat o zdrojový soubor, obor názvů, proceduru nebo blok. Další informace najdete v tématu deklarace kontextů a výchozích úrovní přístupu.
Ve většině případů můžete použít první syntaxi v oddílu syntax tohoto tématu pro deklarování událostí. Některé scénáře ale vyžadují, abyste měli větší kontrolu nad podrobná chování události. Poslední syntaxe v oddílu syntax tohoto tématu, která používá Custom klíčové slovo, poskytuje tento ovládací prvek, který 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 nebo z události nebo když kód vyvolá událost. Příklady naleznete v tématu How to: deklarovat vlastní události pro zachování paměti a Postupy: deklarování vlastních událostí, aby se zabránilo zablokování.
Příklad
Následující příklad používá události pro počítání sekund od 10 do 0. Kód ilustruje několik metod, vlastností a příkazů souvisejících s událostmi. To zahrnuje RaiseEvent příkaz.
Třída, která vyvolá událost, je zdrojem události a metody, které zpracovávají události, jsou obslužné rutiny událostí. Zdroj události může mít několik obslužných rutin pro události, které generuje. Když třída vyvolá událost, tato událost je vyvolána na každé třídě, která se rozhodla zpracovávat události pro tuto instanci objektu.
V příkladu se používá také formulář ( Form1 ) s tlačítkem ( Button1 ) a textovým polem ( TextBox1 ). Když kliknete na tlačítko, zobrazí se v prvním textovém poli odpočítávání od 10 do 0 sekund. Když uplyne celý čas (10 sekund), zobrazí se v prvním textovém poli "Hotovo".
Kód pro Form1 Určuje počáteční a koncovou stavy formuláře. Obsahuje také kód spuštěný při vyvolání události.
chcete-li použít tento příklad, otevřete nový projekt model Windows Forms. Pak do hlavního formuláře přidejte tlačítko s názvem a textové pole Button1 TextBox1 s názvem Form1 . Potom klikněte pravým tlačítkem na formulář a kliknutím na Zobrazit kód otevřete editor kódu.
Přidejte WithEvents proměnnou do oddílu deklarací Form1 třídy :
Private WithEvents mText As TimerState
Do kódu přidejte následující kód pro Form1 . Nahraďte všechny duplicitní procedury, 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. Po uplynutí úplné doby (10 sekund) se v prvním textovém poli zobrazí "Done" (Hotovo).
Poznámka
Metoda My.Application.DoEvents nezpracuje události stejným způsobem jako formulář. Chcete-li povolit formulář pro zpracování událostí přímo, můžete použít multithreading. Další informace najdete v tématu Spravované threading.