一、代码

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事件

最新文章

  1. Maven命令
  2. V4L2框架分析学习二
  3. ubuntu中source insight打不开,报错pagefault的解决方法
  4. iOS开发-UI 从入门到精通(五)
  5. Who&#39;s in the Middle[HDU1157]
  6. Python爬网获取全国各地律师电话号
  7. java 平面上最近两个点之间的距离
  8. python 与数据结构
  9. C#Stimulator项目&gt;&gt;&gt;C/C++ DLL的生成和调用,Windows下的多线程
  10. 用Mediawiki做百科网站资源大参考
  11. 微信小程序,前端大梦想(七)
  12. 【剑指offer】二维数组中的查找
  13. 201521123067 《Java程序设计》第5周学习总结
  14. mac用BootCamp装windows装完之后驱动问题
  15. springboot+mybatis+thymeleaf项目搭建及前后端交互
  16. MYSQL常用命令2
  17. mysql学习笔记--遇到的坑
  18. huawei USG防火墙子接口技术的应用案例
  19. python 爬虫(一) requests+BeautifulSoup 爬取简单网页代码示例
  20. zookeeper日志级别

热门文章

  1. spring cloud:gateway-eureka-filter
  2. 白鹭http请求post
  3. java跨越请求实例
  4. 一款基于jQuery的漂亮弹出层
  5. 后盾网lavarel视频项目---phpstorm 配置ftp, 自动更新同步代码
  6. reduce、map、zip、filter使用记录
  7. ls -i
  8. 红帽虚拟化RHEV-安装RHEV-M
  9. oracle-控制文件的备份和恢复
  10. 简述Vue的实例属性、实例方法