一、代码

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

VB.NET Event RaiseEvent用处的更多相关文章

  1. VB 共享软件防破解设计技术初探(二)

    VB 共享软件防破解设计技术初探(二) ×××××××××××××××××××××××××××××××××××××××××××××× 其他文章快速链接: VB 共享软件防破解设计技术初探(一)http ...

  2. 如何:对 Windows 窗体控件进行线程安全调用

    http://msdn.microsoft.com/zh-cn/library/ms171728(VS.90).aspx http://msdn.microsoft.com/zh-cn/library ...

  3. 【转载】 java利用snmp4j包来读取snmp协议数据(Manager端)

    https://www.cnblogs.com/xdp-gacl/p/4187089.html http://doc.okbase.net/yuanfy008/archive/265663.html ...

  4. vb的property 和event

    Event 语句 定义用户自定义的事件. 语法 [Public] Event procedurename [(arglist)] Event 语句包含下面部分: 部分 描述 Public 可选的.指定 ...

  5. VB中RaiseEvent语句的功能及用法

    Creat a new class named Class1, it's codes like this: Public Event MyEvent() Public Sub RaiseTheEven ...

  6. 关于window.event.returnValue=false的用处

    window.event.returnValue=false放在提交表单中的onclick事件中则不会提交表单,如果放到超链接中则不执行超链接,也就是它禁止了或取消了请求,没有任何效果. 比如: if ...

  7. VB.net Wcf事件广播(订阅、发布)

    这篇东西原写在csdn.net上,最近新开通了博客想把零散在各处的都转移到一处.   一.源起 学WCF有一段时间了,可是无论是微软的WebCast还是其他网上的教程,亦或我购买的几本书中,都没有怎么 ...

  8. VB.NET vs. C#

    VB.NET Program Structure C# Imports System Namespace Hello    Class HelloWorld        Overloads Shar ...

  9. 演练:使用Xamarin.Forms开发产品介绍性质的应用(VB版)

    概述 Xamarin这个使用mono和.net core的跨平台开发框架这几年在不断发展.被微软收购后的Xamarin为个人开发者提供了免费版的Xamarin for Visual Studio,吸引 ...

随机推荐

  1. JDBC API访问数据库的基本步骤。

    JDBC本质:官方定义了一套操作所有关系型数据库的规则(接口),各个数据库厂商实现这个接口,提供数据库驱动jar包. 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类. 任 ...

  2. js测试用

    一,大纲 二,目录二 三,目录三

  3. File类 ReadAllBytes() ReadAllLines() ReadAllText()

    用 File 类里的 ReadAllLines方法读取文件string[] contents = File.ReadAllLines(@"F:\Users\zhuotu003\Desktop ...

  4. __proto__ VS. prototype in JavaScript

    __proto__ VS. prototype in JavaScript http://dmitrysoshnikov.com/ecmascript/javascript-the-core/#a-p ...

  5. zabbix监控惠普打印机

    http://www.ttlsa.com/zabbix/zabbix-monitor-hp-printer/

  6. nginx利用try_files实现多个源

    比如一个视频网站,视频资源分散在几台机器上,但是给用要提供统一的IP,路径,端口.就需要nginx,先检查本机是否有改文件,如果没有就代理其他地方 location / { root /data/ww ...

  7. mysq远程连接报错,host..

    在本机登入mysql后,更改"mysql"数据库里的"user"表里的"host"项,从"localhost"改为'%' ...

  8. rbac权限组件整合到实际项目的全过程详述

    rbac简介 项目的GitHub地址 欢迎Download&Fork&Star:https://github.com/Wanghongw/CombineRbac 另外,本文只简单介绍一 ...

  9. Linux内核中的cmpxchg函数

    http://www.longene.org/forum/viewtopic.php?t=2216 前几天,为了这个函数花了好多时间,由于参考的资料有误,一直都没有看明白,直到google之后,总算搞 ...

  10. 安装mysql出现Couldn't find MySQL server (/usr/bin/mysqld_safe)

    安装mysql出现Couldn't find MySQL server (/usr/bin/mysqld_safe)Starting MySQL ERROR! Couldn't find MySQL ...