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
我的意图是:
- 您单击一个节点。
PropertyA
of instantiated class Controller
已设置,并引发事件 EventA()
。
- 主窗体正在处理事件;表单中的控件已更新。
第一次一切都按预期进行。在使用压缩和修复功能以及编译和创建 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
从那以后一切正常。
我在使用 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
我的意图是:
- 您单击一个节点。
PropertyA
of instantiated classController
已设置,并引发事件EventA()
。- 主窗体正在处理事件;表单中的控件已更新。
第一次一切都按预期进行。在使用压缩和修复功能以及编译和创建 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
从那以后一切正常。