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é Button1
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
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.