自己设计一个AciveX.dll工程
工程包括:form1(窗体),ClsMsg(类模块)
在ClsMsg模块中定义事件
public Event MsgIn
在form1窗体的一个过程中引发事件:raiseevent MsgIn
但是提示:事件没有定义
于是,在ClsMsg中定义公共函数:
Public FUnction MessageIN
在函数过程中引发事件:raiseevent MsgIn
再在窗体过程中调用公共函数,却不知如何调用,是否还要声明类?

解决方案 »

  1.   

    如果是在窗体中触发对象的事件,那么在窗体中应该有该类的实例对象。
    在初始化窗体时,将ClsMsg类的对象Set给窗体.
    在需要触发事件时,由窗体触发类的公共函数MessageIN(可以换成友元的,即friend),在MessageIn中触发事件。
      

  2.   

    示例:
    在类ClsMsg中代码如下:
    Public Event MsgIn()Private Sub Class_Initialize()
        Set Form1.ClsMsg = Me
        Form1.Show
    End SubFriend Function MessageIN()
        RaiseEvent MsgIn
    End Function窗体中代码如下:
    Private m_ClsMsg As ClsMsgPublic Property Set ClsMsg(ByRef vNewValue As ClsMsg)
        Set m_ClsMsg = vNewValue
    End PropertyPrivate Sub Command1_Click()
        m_ClsMsg.MessageIN
    End Sub
    本例是由Command按钮触发类的事件。
      

  3.   

    TO: qhluo02(*QHcsnd02)你和楼主是不是同一人,你说的是什么问题
      

  4.   

    我已经按照楼上所说的作了,MessageIN函数也执行了,可时调用的程序并没有显示事件被触发
    调用代码:
    private CLsM as new CLsmsg
    private withevents MsgIN as ClsMsg
    private sub MsgIN_MsgIN()
    msgbox "OK"
    end sub
      

  5.   

    这是在标准Exe(测试工程,测试DLL)中的代码,窗体上也有一按钮。窗体内代码如下:Public WithEvents Test As ClsMsgPrivate Sub Command1_Click()
        Set Test = New ClsMsg
    End SubPrivate Sub Test_MsgIn()
        MsgBox "我已被触发了。"
    End Sub
      

  6.   

    楼主的测试代码
    private withevents MsgIN as ClsMsg
    我并没有看到你的对象MsgIN什么时候New的。