VB.NET Event RaiseEvent用處


一、代碼

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

 

 

二、解釋Event和RaiseEvent意義

Event 相當於給類定義了一個自定義事件,可以在調用此類的時候,給此事件添加代碼

RaiseEvent 是給自定義事件添加的代碼執行的位置,

簡單說,如果你只是添加個事件,沒有在相應位置觸發事件,等於事件沒定義

 

三、解釋代碼

1.首先點擊 Button1_Click然后就運行:
mText.StartCountdown(10.0, 0.1) 
在這個StartCountDown函數中通過:
RaiseEvent UpdateTime(Duration - SoFar)  觸發事件,就會調用上面:Private Sub mText_UpdateTime(ByVal Countdown As Double) Handles mText.UpdateTime 這個過程。更新數值,顯示在textbox1上面。

2.當運行完 Do While ElapsedTime < Duration 這個循環時候,就會觸發事件:
RaiseEvent Finished()
就會調用:
Private Sub mText_ChangeText() Handles mText.Finished 
    TextBox1.Text = "Done" 
End Sub 
顯示Done。

 

四、通俗理解

可以這么理解
private sub xx
起床()
raiseevent 過程()
上班()
end sub
----
寫這個方法的人知道有這么個過程,但是不確定具體應該怎么做
比如是做公交還是打的,還是拼車,還是其他什么,於是提供一個
事件給外部使用,其他使用該方法的人可以在這個事件里面寫具體的
過程
----
通常用在繼承的控件中,比如控件中button的click事件,因為控件已經封裝在外部是不能再寫該事件的,
而寫控件的人又不能確定在click事件中應該怎么操作,於是提供一個公開的事件讓外面的人自己去寫,
等於是外部調用的人間接寫click事件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM