【发布时间】: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
我的意图是这样的:
- 单击一个节点。
-
已设置实例化类
Controller的PropertyA,并引发事件EventA()。 - 主窗体正在处理事件;表单中的控件已更新。
第一次一切都按预期工作。使用压缩和修复功能以及编译和创建 ACCDE 文件后,子 mController_EventA() 似乎丢失在空间中:事件触发后没有任何反应。为什么会这样?!
WithEvents 子句只允许在对象模块中使用。但我需要从普通模块中实例化自愈对象。
提前非常感谢!
华盛顿
【问题讨论】:
-
@Andre:感谢监督和提示! :-)
标签: vba ms-access ms-access-2007