Access 2007 中的用户定义事件无法正常工作

User-defined events in Access 2007 doesn't work properly

我在使用 Access 2007 中的用户定义事件时遇到一些问题:

事件在 class 模块中声明 - 我们将其命名为 class Controller - 如下(简化代码示例):

Public Event EventA()

[...]

Public Property Let PropertyA(RHS As String)
    mPropertyA = RHS
    RaiseEvent EventA
End Property

[...]

class 在模块中实例化为 "self-healing" object 如下:

Public Property Get objController() As Controller
    Static c As Controller

    If c Is Nothing Then _
        Set c = New Controller

    Set objController = c
End Property

在一种形式中,Controller class 在子 Form_Load() 中声明和设置如下:

Private WithEvents mController  As Controller

[...]

Private Sub Form_Load()
    [...]
    Set mController = objController
    [...]
End Sub

在同一个表单中,我实施了事件操作:

Private Sub mController_EventA()
    [...]
    Me!PropertyA = mController.PropertyA
    [...]
End Sub

单击表单上的按钮后,将打开一个带有树视图的对话框。单击树视图中的节点后 PropertyA 中的 Controller 对象更改为:

Private Sub tvwRDS_NodeClick(ByVal node As Object)
    [...]
    objController.PropertyA = node.key
    [...]
End Sub

我的意图是:

  1. 您单击一个节点。
  2. PropertyA of instantiated class Controller 已设置,并引发事件 EventA()
  3. 主窗体正在处理事件;表单中的控件已更新。

第一次一切都按预期进行。在使用压缩和修复功能以及编译和创建 ACCDE 文件后,sub mController_EventA() 似乎在 space 中丢失:触发事件后没有任何反应。为什么?!

WithEvents 子句只允许在对象模块中使用。但是我需要从普通模块实例化自愈对象。

提前致谢!

D.C.

看来 Property 本身必须声明为 Static:

Public Static Property Get objController() As Controller
    Static c As Controller

    If c Is Nothing Then _
        Set c = New Controller

    Set objController = c
End Property

从那以后一切正常。