0

我有一个用于打开和操作专有图像类型的 ActiveX 控件。我能够将控件嵌入到 Access 表单中,并且通过使用对象浏览器能够确定所有类成员。我遇到的唯一问题是处理控件引发的一些事件。

例如,从对象浏览器中,我可以看到以下事件定义:

Event RightClicked()

当我将以下代码添加到表单时:

Private Sub CtrlInstanceName_RightClicked()
  'Anything here
End Sub

一切都按预期工作。但是,如果事件声明有传递给它的参数,例如:

Event MeasurementUpdated(id as Long)

添加:

Private Sub CtrlInstanceName_MeasurementUpdated(id as Long)
  'Anything here
End Sub

产生以下错误:

作为事件属性设置输入的表达式 ... 产生了以下错误:过程声明与具有相同名称的事件或过程的描述不匹配。

添加第二个处理程序后更奇怪的是,窗体上的所有事件处理程序都会产生此错误,包括由窗体和窗体上的其他控件引发的事件。

我已经在 C# .NET 应用程序中测试了 ActiveX 控件,并且能够处理那里的事件(尽管它们并没有按预期工作)。在 Visual Studio 中,函数原型最终与自动定义的事件处理程序类类型有点奇怪。

关于如何更改事件过程声明以避免此错误的任何想法?

4

1 回答 1

0

就像大多数星期五的问题一样,我后来发现这个问题的答案相当简单。

首先,由于我不熟悉 VBA 代码编辑器,我不知道可以使用代码上方的 Object 组合框为嵌入式控件创建存根。选择我的控件名称后,我MeasurementUpdate从过程组合框中选择了事件。

正确的声明很简单:

Private Sub CtrlInstanceName_MeasurementUpdated(ByVal id as Long)
  'Anything here
End Sub

关键区别在于ByVal修饰符。

于 2012-07-24T18:45:13.310 回答