zoukankan      html  css  js  c++  java
  • 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事件

  • 相关阅读:
    stm32 输入捕获
    stm32 输入捕获
    stm32 窗口看门狗 WWDG
    stm32 窗口看门狗 WWDG
    stm32 独立看门狗 IWDG
    Linux开机启动chkconfig命令详解(让MySQL、Apache开机启动)
    linux命令之 用户和群组
    vmware
    linux下安装mysql手记
    wget
  • 原文地址:https://www.cnblogs.com/gyc19920704/p/5385931.html
Copyright © 2011-2022 走看看