參考處
下列範例會使用事件,從 10 秒倒數計時到 0 秒。這個程式碼說明數個與事件相關的方法、屬性和陳述式 (包括 RaiseEvent 陳述式)。
引發事件的類別是事件來源 (Event Source),而處理事件的方法則是事件處理常式。一個事件來源可有多個處理常式來處理產生的事件。當類別引發事件時,這個事件便會在每個選定為物件執行個體處理事件的類別上引發。
這個範例也會使用包含一個按鈕 (Button1) 和一個文字方塊 (TextBox1) 的表單 (Form1)。當您按一下按鈕時,第一個文字方塊會顯示從 10 秒到 0 秒的倒數計時。整段時間 (10 秒) 結束時,第一個文字方塊會顯示「完成」。
Form1 的程式碼會指定表單的初始和終結狀態。其中也包含引發事件時執行的程式碼。
若要使用這個範例,請開啟新的 Windows 應用程式專案,將一個按鈕 (名為 Button1) 和一個文字方塊 (名為 TextBox1) 加入至主要表單 (名為 Form1)。然後以滑鼠右鍵按一下表單,再按 [檢視程式碼] 開啟程式碼編輯器。
將 WithEvents 變數加入至 Form1 類別的宣告區段中。
Private WithEvents mText As TimerState
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
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 |