2012-07-20 120 views
0

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

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

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 

产生以下错误:

The expression ... you entered as the event property setting produced the following error: Procedure declaration does not match description of event or procedure having the same name.

即使加上本次后,更奇怪处理程序,表单上的所有事件处理程序都会产生此错误,包括窗体上的窗体和其他控件引发的事件。

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

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

回答

0

就像大多数周五的问题一样,后来我发现这个问题的答案相当简单。首先,由于我不熟悉VBA代码编辑器,我不知道可以通过使用代码上方的Object组合框为嵌入式控件创建存根。选择我的控制名称后,我从程序组合框中选择了MeasurementUpdate事件。

正确的声明很简单:

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

关键的区别是ByVal修改。