RaiseEvent – příkaz

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

Syntax

RaiseEvent eventname[( argumentlist )]  

Součásti

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

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

Poznámky

Požadovaná eventname je název události deklarované v rámci modulu. postupuje podle Visual Basic konvence pojmenovávání proměnných.

Pokud událost nebyla deklarována v modulu, ve kterém je vyvolána, dojde k chybě. Následující fragment kódu ukazuje 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

Nemůžete 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 je vyvolat pomocí RaiseEvent odvozeného formuláře. Pokud deklarujete Click událost v modulu formuláře, vystínuje se vlastní Click událost formuláře. Můžete přesto vyvolat Click událost formuláře voláním OnClick metody.

ve výchozím nastavení událost definovaná v Visual Basic vyvolává obslužné rutiny událostí v pořadí, ve kterém jsou navázána připojení. Vzhledem k tomu, že události mohou mít ByRef parametry, proces, který spojuje pozdě, může přijímat parametry, které byly změněny předchozí obslužnou rutinou události. Po provedení obslužné rutiny události je ovládací prvek vrácen do subrutiny, která událost vyvolala.

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 v době běhu, nemusí se podařit zachytit pomocí přidružených obslužných rutin událostí. Použijte Shared modifikátor pro vytvoření sdílené události, pokud potřebujete vyvolat událost z konstruktoru.

Poznámka

Můžete změnit výchozí chování událostí definováním vlastní události. Pro vlastní události RaiseEvent Vyvolá příkaz přístup k události RaiseEvent . Další informace o vlastních událostech naleznete v tématu příkaz Event.

Příklad 1

Následující příklad používá události pro počí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ě RaiseEvent příkazu.

Třída, která vyvolá událost, je zdrojem události a metody, které zpracovávají události, jsou obslužné rutiny událostí. Zdroj události může mít několik obslužných rutin pro události, které generuje. Když třída vyvolá událost, tato událost je vyvolána na každé třídě, která se rozhodla zpracovávat události pro tuto instanci objektu.

V příkladu se používá také formulář ( Form1 ) s tlačítkem ( Button1 ) a textovým polem ( TextBox1 ). Když kliknete na tlačítko, zobrazí se v prvním textovém poli odpočítávání od 10 do 0 sekund. Když uplyne celý čas (10 sekund), zobrazí se v prvním textovém poli "Hotovo".

Kód pro Form1 Určuje počáteční a koncovou stavy formuláře. Obsahuje také kód spuštěný při vyvolání události.

chcete-li použít tento příklad, otevřete nový projekt Windows aplikace, přidejte tlačítko s názvem Button1 a textové pole s názvem 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 WithEvents proměnnou do oddílu deklarace Form1 třídy.

Private WithEvents mText As TimerState

Příklad 2

Přidejte následující kód do kódu pro Form1 . Nahraďte všechny duplicitní procedury, 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 názvem Spustit. V prvním textovém poli se začne počítat sekundy. Když uplyne celý čas (10 sekund), zobrazí se v prvním textovém poli "Hotovo".

Poznámka

My.Application.DoEventsMetoda nezpracovává události přesně stejným způsobem jako formulář. Chcete-li, aby formulář mohl zpracovávat události přímo, můžete použít multithreading. Další informace najdete v tématu spravovaná vlákna.

Viz také