RaiseEvent 语句示例
下面的示例使用事件来计数 100 米短跑比赛的演示的最短时间秒数。代码演示了所有与事件有关的方法、属性、以及语句,包括 RaiseEvent 语句。引发一个事件的类是事件源,而实现这个事件的类是吸收类。一个事件源可以有多个吸收类用于吸收这个事件源所产生的事件。当类引发事件时,该事件将在每一个被选择来为该对象实例吸收事件的类上被引发。该示例使用了一个带有一个按纽( Command1 )、一个标签( Label1 )、和两个文本框( Text1 和 Text2 )的窗体( Form1 )。当单击该按纽时,第一个文本框显示“From Now”并且第二个文本框开始时间计数。当整个时间(9.84秒)结束时,第一个文本框将显示“Until Now”,并且第二个文本框显示“9.84”。Form1 的代码指定了窗体的最初状态和结束状态。它同时还包括当事件被引发时所要执行的代码。Option ExplicitPrivate WithEvents mText As TimerStatePrivate Sub Command1_Click()
    Text1.Text = "From Now"
    Text1.Refresh
    Text2.Text = "0"
    Text2.Refresh
    Call mText.TimerTask(9.84)
End SubPrivate Sub Form_Load()
    Command1.Caption = "Click to Start Timer"
    Text1.Text = ""
    Text2.Text = ""
    Label1.Caption = "The fastest 100 meters ever run took this long:"
    Set mText = New TimerState
    End SubPrivate Sub mText_ChangeText()
    Text1.Text = "Until Now"
    Text2.Text = "9.84"
End SubPrivate Sub mText_UpdateTime(ByVal dblJump As Double)
    Text2.Text = Str(Format(dblJump, "0"))
    DoEvents
End Sub剩下的代码在一个名为 TimerState 的类模块中。包括在该模块的命令中的是 Raise Event语句。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

解决方案 »

  1.   

    谢谢playyuer,
    但我是想在VC编写的DLL中去触发VB的事件,就好像回调函数.
    而不是使用VB的类.
      

  2.   

    我的思路是这样的,建立一个VC写的ACTIVEX DLL
    然后在VB中建立一个CLASS MODULE,这里假设为cDraw,然后cDraw包含一个Update方法
    在FORM中把VB中的CLASS MODULE实例传递给VC写的ACTIVEX DLL。FORM中的代码用一下方法实现:
    set objServer=CreateObject("Server.Object")  '建立服务器部件
    set objClient=new cDraw  
    objServer.ClientObject=objClient在ACTIVEX DLL中,当有时间发生时就直接ClientObject->Update();你可以参考一下MSDN中VB企业版例子,名字叫CALLBACK。