Sdílet prostřednictvím


Příkaz Event

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.

Viz také