Sdílet prostřednictvím


RaiseEvent – příkaz

Aktivuje událost deklarovanou na úrovni modulu v rámci třídy, formuláře nebo dokumentu.

Syntaxe

RaiseEvent eventname[( argumentlist )]  

Součástky

eventname
Povinný: Název události, která se má aktivovat.

argumentlist
Nepovinné. Seznam proměnných, polí nebo výrazů oddělených čárkami Argument argumentlist musí být uzavřen závorky. Pokud neexistují žádné argumenty, musí být závorky vynechány.

Poznámky

Povinným eventname je název události deklarované v rámci modulu. Řídí se konvencemi vytváření názvů proměnných jazyka Visual Basic.

Pokud událost nebyla deklarována v modulu, ve kterém je vyvolána, dojde k chybě. Následující fragment kódu znázorňuje deklaraci události a proceduru, ve které je událost vyvolána.

' Declare an event at module level.
Event LogonCompleted(ByVal UserName As String)

Sub Logon(ByVal UserName As String)
    ' Raise the event.
    RaiseEvent LogonCompleted(UserName)
End Sub

Nelze použít RaiseEvent k vyvolání událostí, které nejsou explicitně deklarovány v modulu. Například všechny formuláře dědí Click událost z System.Windows.Forms.Form, nelze zvýšit pomocí RaiseEvent v odvozené formě. Pokud deklarujete Click událost v modulu formuláře, stínuje vlastní Click událost formuláře. Událost formuláře Click můžete přesto vyvolat voláním OnClick metody.

Ve výchozím nastavení událost definovaná v jazyce Visual Basic vyvolává obslužné rutiny událostí v pořadí, v jakém jsou připojení vytvořena. Protože události mohou mít ByRef parametry, proces, který se připojuje pozdě, může přijímat parametry, které byly změněny dřívější obslužnou rutinou události. Po spuštění obslužných rutin událostí se ovládací prvek vrátí do podprogramu, který vyvolal událost.

Poznámka:

Nesdílené události by neměly být vyvolány v rámci konstruktoru třídy, ve které jsou deklarovány. I když takové události nezpůsobí chyby za běhu, nemusí být zachyceny přidruženými obslužnými rutinami událostí. Shared Modifikátor použijte k vytvoření sdílené události, pokud potřebujete vyvolat událost z konstruktoru.

Poznámka:

Výchozí chování událostí můžete změnit definováním vlastní události. U vlastních událostí vyvolá RaiseEvent příkaz přístupové objekty RaiseEvent události. Další informace o vlastních událostech najdete v tématu Příkaz události.

Příklad 1

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, včetně příkazu 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í.

Chcete-li použít tento příklad, otevřete nový projekt aplikace systému Windows, přidejte tlačítko s názvem a textové pole pojmenované Button1TextBox1 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

Příklad 2

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 přesně 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é