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
Volitelný. 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 ukazuje časovač, který odpočítává od 10 do 0 sekund a zobrazuje průběh konzoly. Po dokončení odpočítávání se zobrazí text Hotovo.

Deklarujte proměnnou WithEvents ve vaší třídě pro zpracování událostí z časovače:

Public Class TimerExample
    Private WithEvents mTimer As TimerState

Příklad 2

Přidejte následující kód pro implementaci obslužných rutin událostí a logiky časovače. Tento příklad ukazuje, jak pomocí RaiseEvent příkazu upozornit obslužné rutiny událostí při aktualizaci nebo dokončení časovače.

    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

Když spustíte předchozí příklad, začne počítat sekundy od 10 do 0 a zobrazí se průběh konzoly. Když uplynulo celé období (10 sekund), zobrazí se "Hotovo".

Viz také