VB.NET Event RaiseEvent用处
2016-04-13 10:07
519 查看
一、代码
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事件
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事件
相关文章推荐
- VB6.0手册
- vb作业
- vb作业
- WORD中储存vba代码,把excel数据写入word并保存。
- VB数据集
- VB中IIF函数
- VB中RaiseEvent语句的功能及用法
- vba 主题
- VB中的SSTab控件隐藏选项卡方法
- CBR编码与VBR编码
- VB使用API进行MD5加密解密
- VB下较为高效的字节和十六进制字符串转换
- 学习一个月vb6.0总结
- 确实还是字典法方便
- 顶点缓存对象(VBO)
- 无法打开模块文件,对象引用被隐藏
- VB6 加载控件Windows Common Controls 6.0(mscomctl.ocx)失败提示“对象库未注册”
- AVB传输协议数据包分析
- AVB 的上位机控制软件怎么玩?
- 学习vb的心得体会