首页 > Python基础教程 >
-
vb.net教程之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事件