觸發在類別、表單或檔內的模組層級宣告的事件。
語法
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 來引發模組中未明確宣告的事件。 例如,所有表單都會繼承 Click 自 System.Windows.Forms.Form的事件,因此無法在衍生表單中使用 RaiseEvent 引發事件。 如果您在表單模組中宣告 Click 事件,它會遮蔽窗體本身 Click 的事件。 您仍然可以呼叫 Click 方法來叫用表單的事件OnClick。
根據預設,在 Visual Basic 中定義的事件會依照建立連接的順序來引發其事件處理程式。 因為事件可以有 ByRef 參數,因此連接較晚的進程可能會接收先前事件處理程式已變更的參數。 在事件處理程式執行之後,控件會傳回引發事件的子程式。
備註
在宣告非共用事件的類別建構函式內,不應引發非共用事件。 雖然這類事件不會造成運行時錯誤,但相關聯的事件處理程式可能無法攔截它們。
Shared如果您需要從建構函式引發事件,請使用 修飾詞來建立共用事件。
備註
您可以藉由定義自定義事件來變更事件的預設行為。 針對自定義事件,語句會 RaiseEvent 叫用事件的 存取 RaiseEvent 子。 如需自定義事件的詳細資訊,請參閱 Event Statement。
範例 1
下列範例會使用事件來計算從 10 到 0 的秒數。 此程式代碼說明數個事件相關方法、屬性和語句,包括 RaiseEvent 語句。
引發事件的類別是事件來源,而處理事件的方法則是事件處理程式。 事件來源可以有多個其產生的事件處理程式。 當 類別引發事件時,該事件會在已選取處理該物件實例之事件的每個類別上引發。
此範例示範從10秒倒數到0秒的計時器,並將進度顯示到主控台。 倒數計時結束後,顯示“完成”。
在類別中宣告變數 WithEvents 來處理來自計時器的事件:
Public Class TimerExample
Private WithEvents mTimer As TimerState
範例 2
新增下列程式碼來實作事件處理常式和計時器邏輯。 此範例示範如何使用 RaiseEvent 陳述式在計時器更新或完成時通知事件處理常式。
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
當您執行上述範例時,它會開始倒數秒數,從 10 到 0,並向主控台顯示進度。 當全時間(10 秒)過去時,它會顯示“完成”。