需要帮助在MSAccess VBA中连接自定义事件

马兹

我有一个带有按钮的表单,该表单在代码模块中调用了长期运行的函数。我想在此过程中将定期状态更新消息返回到表单。我最初的想法是为该函数提供回调方法,但我不认为VBA支持该方法。因此,现在我尝试使用自定义类和事件来实现。

我创建了一个名为“ MessageHandler”的类模块,其中包含以下代码:

Public Event OnMessageReceivedEvent(message As String)

Public Sub MessageReceived(message As String)
    RaiseEvent OnMessageReceivedEvent(message)
End Sub

在表格的顶部,我声明:

Dim WithEvents FormMessageHandler As MessageHandler

Private Sub FormMessageHandler_OnMessageReceived(message As String)
    AppendLogMessage message
End Sub

然后在表单上的按钮后面的代码中:

Set FormMessageHandler = New MessageHandler

然后,我将FormMessageHandler传递给模块中的长期运行函数,并定期调用:

messageHandler.MessageReceived "Some progress update blah blah"

但是,永远不会调用FormMessageHandler_OnMessageReceived,因此事件将无法正常工作。在我看来,逻辑FormMessageHandler现在已注册为OnMessageReceived事件的侦听器,但它如何知道响应该事件的方法调用。似乎缺少的是一种指定类似以下内容的方法:

FormMessageHandler.OnMessageReceivedEvent = FormMessageHandler_OnMessageReceived

根据我完成的搜索,看起来好像有某种特殊的常量,例如:FormMessageHandler.OnMessageReceived =“ [Event Procedure]”

哪个可以提供缺少的链接,但我不知道如何使用它?任何帮助,将不胜感激。

马兹

好的,由于这里提供了出色的指南,我已经弄清楚了:http : //sourcedaddy.com/ms-access/creating-custom-events.html(实际上位于第三页http://sourcedaddy.com/ ms-access / exploiting-access-class-module-events.html)。

事实证明,如果以某种方式命名并且我想念名称末尾的单词event则自动创建指向引发事件的方法的链接

Private Sub FormMessageHandler_OnMessageReceived(message As String)

应该被称为:

Private Sub FormMessageHandler_OnMessageReceivedEvent(message As String)

创建此方法的最可靠方法是按照指南的建议进行操作:

WithEvents关键字几乎是神奇的。使用WithEvents限定对象声明后,对象的名称将显示在类模块顶部的下拉列表中,而对象的事件将显示在右侧的下拉列表中。

从下拉列表中选择FormMessageHandler对象会自动创建消耗该事件所需的方法(当我将其与所发现的事件进行比较时,我看到了命名方面的错误)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章