Events 如何在VB6中检测是否已分配事件处理程序?

Events 如何在VB6中检测是否已分配事件处理程序?,events,vb6,Events,Vb6,如果我在VB6中有一个类,带有一些事件 Public Event SomethingHappened 后来我想启动这项活动 RaiseEvent SomethingHappened 这很好,在我主持课程的表格中 Public WithEvents TheObject as MyClass ... Public Sub TheObject_SomethingHappened ... 但是,有没有办法在引发事件的代码中告诉我们,事件是否被分配了一个处理程序? 因为如果没有,我想做一些默认行为

如果我在VB6中有一个类,带有一些事件

Public Event SomethingHappened
后来我想启动这项活动

RaiseEvent SomethingHappened
这很好,在我主持课程的表格中

Public WithEvents TheObject as MyClass
...
Public Sub TheObject_SomethingHappened
...
但是,有没有办法在引发事件的代码中告诉我们,事件是否被分配了一个处理程序? 因为如果没有,我想做一些默认行为

我看到在VB.NET中有一个自动声明的“SomethingHappenedEvent”变量,但在VB6中似乎不起作用。
我在Google上找不到这方面的任何提及,因此我怀疑这是不可能的,但是…

正如我在评论中提到的,Microsoft经常在其控件和类中通过将ByRef布尔“cancel default action”参数传递给事件处理程序来处理这一问题

如果处理程序在返回之前没有设置Cancel=True,那么组件将执行默认操作


这可以被视为基于既定用途的可行模式。可能有其他选择,但当您有想要提供默认操作的事件时,这似乎非常简单和干净,可以实现。

如果我正确理解您的需求,WithEvents应该适合您。有关WithEvents的更多详细信息,请查看MSDN。我正在使用WithEvents作为类的宿主。问题是,这段代码如何判断窗体是否处理事件?只需声明一个全局布尔变量并从事件内部修改它即可。如果您想查看代码是否处理了事件,只需检查您的变量。让事件的赋值与否控制类中是否发生其他行为,这感觉像是一个糟糕的设计。我会将“默认行为与否”设置为显式设置。带有ByRef布尔“取消默认操作”参数的事件在Microsoft的控件和类中非常常见。因此,这应该是对该模式的认可,如果没有其他东西的话,它也是可行的。