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í AddHandlerobjekty , RemoveHandlera 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, 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 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.

Viz také