【问题标题】:User-defined events in Access 2007 doesn't work properlyAccess 2007 中的用户定义事件无法正常工作
【发布时间】:2018-07-10 16:39:42
【问题描述】:

我对 Access 2007 中的用户定义事件有一些问题:

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

Public Event EventA()

[...]

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

[...]

该类在模块中被实例化为"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 类在子 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. 已设置实例化类 ControllerPropertyA,并引发事件 EventA()
  3. 主窗体正在处理事件;表单中的控件已更新。

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

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

提前非常感谢!

华盛顿

【问题讨论】:

  • @Andre:感谢监督和提示! :-)

标签: vba ms-access ms-access-2007


【解决方案1】:

看来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

从那以后它工作正常。

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多