Skip to content

Event

声明用户自定义事件。

语法:[ Public ] Event procedurename [ (arglist) ]

Public

可选。指定 Event 在整个项目中可见。Event 类型默认为 Public。注意事件只能在声明它们的模块中引发。

procedurename

事件的名称;遵循标准变量命名约定。

arglist

[ ByVal | ByRef ] varname [ () ] [ As type ]

ByVal
可选 指示参数按值传递。
ByRef
可选 指示参数按引用传递。ByRef 是默认方式,与Visual Basic .NET不同。
varname
表示传递给过程的参数的变量名称;遵循标准变量命名约定。
type
可选 传递给过程的参数的数据类型;可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal、Date、String(仅限变长)、Object、Variant、用户自定义类型(UDT)或对象类型。

声明事件后,使用 RaiseEvent 语句触发事件。如果 Event 声明出现在标准模块中,将产生语法错误。事件不能声明为返回值。典型的事件声明和触发如下片段所示。

vb
' Declare an event at module level of a class module 
 
Event LogonCompleted (UserName as String) 
 
Sub 
 RaiseEvent LogonCompleted("AntoineJan") 
End Sub

事件参数的声明方式与过程参数相同,但有以下例外:事件不能有命名参数、Optional 参数或 ParamArray 参数。事件没有返回值。

示例

以下示例使用事件在最快100米赛跑演示期间倒数秒数。代码说明了所有与事件相关的方法、属性和语句,包括 Event 语句。

引发事件的类是事件源,实现事件的类是接收器。一个事件源可以有多个接收器来处理它生成的事件。当类引发事件时,该事件会在每个选择接收该对象实例事件的类上触发。

示例还使用了包含按钮(Command1)、标签(Label1)和两个文本框(Text1Text2)的窗体(Form1)。当按钮被点击时,第一个文本框显示"From Now",第二个文本框开始计数秒数。当完整时间(9.84秒)过去后,第一个文本框显示"Until Now",第二个显示"9.84"。

代码指定了窗体的初始和终止状态。还包含引发事件时执行的代码。

vb
Class Form1
  Option Explicit 
 
  Private WithEvents mText As TimerState 
 
  Private Sub Command1_Click() 
    Text1.Text = "From Now" 
    Text1.Refresh 
    Text2.Text = "0" 
    Text2.Refresh 
    Call mText.TimerTask(9.84) 
  End Sub 
 
  Private Sub Form_Load() 
    Command1.Caption = "Click to Start Timer" 
    Text1.Text = "" 
    Text2.Text = "" 
    Label1.Caption = "The fastest 100 meter run took this long:" 
    Set mText = New TimerState 
  End Sub 
 
  Private Sub mText_ChangeText() 
    Text1.Text = "Until Now" 
    Text2.Text = "9.84" 
  End Sub 
 
  Private Sub mText_UpdateTime(ByVal dblJump As Double) 
    Text2.Text = Str(Format(dblJump, "0")) 
    DoEvents 
  End Sub
End Class

其余代码在名为TimerState的类模块中。Event 语句声明了事件引发时启动的过程。

vb
Class TimerState
    Option Explicit 
    Public Event UpdateTime(ByVal dblJump As Double)
    Public Event ChangeText() 
 
    Public Sub TimerTask(ByVal Duration As Double) 
        Dim dblStart As Double 
        Dim dblSecond As Double 
        Dim dblSoFar As Double 
        dblStart = Timer 
        dblSoFar = dblStart 
 
        Do While Timer < dblStart + Duration 
        If Timer - dblSoFar >= 1 Then 
            dblSoFar = dblSoFar + 1 
            RaiseEvent UpdateTime(Timer - dblStart) 
        End If 
        Loop 
 
        RaiseEvent ChangeText 
    End Sub
End Class

twinBASIC及其LOGO版权为作者"韦恩"所有