免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
Board logo

標題: 設計函數HANDLE 事件觸發 [打印本頁]

作者: mhfo    時間: 2013-12-3 08:42     標題: 設計函數HANDLE 事件觸發

參考處


下列範例會使用事件,從 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




歡迎光臨 魚骨頭的雲端圖書館 (http://mhfo.hotbbs.info/) Powered by Discuz! 7.0.0