RaiseEvent 陳述式

觸發類別、表單或文件中在模組層級宣告的事件。

語法

RaiseEvent eventname[( argumentlist )]  

組件

eventname
必要。 要觸發的事件名稱。

argumentlist
選擇性。 變數、陣列或運算式的逗點分隔清單。 argumentlist 引數必須以括弧括住。 如果沒有任何引數,則必須省略括弧。

備註

必要的 eventname 是在模組內宣告的事件名稱。 它會遵循 Visual Basic 變數命名慣例。

如果事件尚未在引發的模組內宣告,就會發生錯誤。 下列程式碼片段說明事件宣告,以及引發事件的程序。

' 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

您無法使用 RaiseEvent 來引發模組中未明確宣告的事件。 例如,所有表單都會從 System.Windows.Forms.Form 繼承 Click 事件,無法在衍生表單中使用 RaiseEvent 事件來引發。 如果您在表單模組中宣告 Click 事件,則會遮蔽表單自己的 Click 事件。 您仍然可以透過呼叫 OnClick 方法來叫用表單的 Click 事件。

根據預設,在 Visual Basic 中定義的事件會依建立連線的順序引發其事件處理常式。 由於事件可以有 ByRef 參數,因此延後連線的處理序可能會收到先前事件處理常式已變更的參數。 在事件處理常式執行之後,控制權會返回引發事件的副程式。

注意

非共用事件不應該在其宣告所在的類別建構函式中引發。 雖然這類事件不會造成執行階段錯誤,但可能會被相關事件處理常式所攔截。 如果您需要從建構函式引發事件,請使用 Shared 修飾詞來建立共用事件。

注意

您可以定義自訂事件來變更事件的預設行為。 針對自訂事件,RaiseEvent 陳述式會叫用事件的 RaiseEvent 存取子。 如需自訂事件的詳細資訊,請參閱 Event 陳述式

範例 1

下列範例會使用事件以從 10 秒到 0 秒倒數計時。 程式碼會說明數個事件相關的方法、屬性和陳述式,包括 RaiseEvent 陳述式。

引發事件的類別是事件來源,處理事件的方法為事件處理常式。 事件來源對於它所產生的事件可以有多個處理常式。 當類別引發事件時,該事件是在每個類別 (已被選擇來處理該物件執行個體的事件) 上引發。

此範例也會使用表單 (Form1) 與按鈕 (Button1) 和文字方塊 (TextBox1)。 當您按一下按鈕時時,第一個文字方塊會顯示從 10 秒到 0 秒的倒數計時。 在經過完整時間 (10 秒) 之後,第一個文字方塊會顯示 [完成]。

Form1 的程式碼會指定表單的初始和終止狀態。 它也包含引發事件時執行的程式碼。

若要使用此範例,請開啟新的 Windows 應用程式專案,將名為 Button1 的按鈕和名為 TextBox1 的文字輸入框新增至名為 Form1 的主表單。 以滑鼠右鍵按一下表單,然後按一下 [檢視程式碼] 以開啟程式碼編輯器。

WithEvents 變數新增至 Form1 類別的宣告區段。

Private WithEvents mText As TimerState

範例 2

將下列程式碼加入至 Form1 的程式碼。 取代可能存在的任何重複程序,例如 Form_LoadButton_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

按 F5 鍵執行上述範例,然後按一下標示為 [開始] 的按鈕。 第一個文字方塊會開始倒數計時。 在經過完整時間 (10 秒) 之後,第一個文字方塊會顯示 [完成]。

注意

My.Application.DoEvents 方法不會使用與表單相同的方式來處理事件。 若要直接讓表單處理事件,您可以使用多執行緒。 如需詳細資訊,請參閱受控執行緒

另請參閱