如何将WithEvents关键字与全局变量一起使用?

CJ7*_*CJ7 5 vb6 events module class

我试图在VB6模块中声明一个变量,如下所示:

Public WithEvents MyObject As MyClass
Run Code Online (Sandbox Code Playgroud)

帮助文件说WithEvents只能在类模块中使用.为什么不能在.bas模块中使用它?

我正在使用的遗留代码有一个在模块中全局声明的对象.我想添加WithEvents到这个声明,但我需要保持对象全局,因为许多其他形式等引用该对象.如何以最小的代码中断实现这一目标?

wqw*_*wqw 5

编写一个接受全局对象作为参数的类并接收其事件.

' Class MySink
Private WithEvents m_oSink As MyClass

Friend Sub frInit(oSink As MyClass)
    Set m_oSink = oSink
End Sub

Private Sub m_oSink_MyEvent()
    '--- implement event
End Sub
Run Code Online (Sandbox Code Playgroud)

.bas模块中创建此类的实例.

Public g_oMyObject AS MyClass
Private m_oMySink As MySink

Sub Main()
    Set g_oMyObject = New MyClass
    Set m_oMySink = New MySink
    m_oMySink.frInit g_oMyObject
End Sub
Run Code Online (Sandbox Code Playgroud)