0

我在动态分配 OnMouseMove 事件时遇到问题。

在一份报告中,我有数百个按钮,我为其分配了一个 OnClick 事件。此事件通过在调用中使用条件 WHERE 打开另一个报表。我通过提取 Button 的名称(包括其编号)、提取该编号并将其作为函数的参数提供给它来做到这一点。
这运作良好,正确的报告打开。我认为,没有检查,这个论点是正确的。

它的工作原理如下:

在报告的初始化函数中,我有

 For Each ctl In Me.Controls
If ctl.ControlType = acCommandButton Then
nSekNr = ParseNumber(ctl.Name, 6)
  ctl.OnClick = "=MapButtonClick('" & sBtnName & "', '" & nSekNr & "')"
[...]

ParseNumber 函数只包括

ParseNumber = Right(ctlName, (Len(ctlName) - z))

然后,我的点击功能如下

Public Function MapButtonClick(ByVal sBtnName As String, ByVal nSekNr As Byte)
DoCmd.Minimize
DoCmd.Close acReport, "repSektion"
DoCmd.OpenReport "repSektion", acViewPreview, , "[SekID] = " & nSekNr
End Function

当我单击每个按钮时,这可以工作并打开正确的报告。(是的,我知道不需要一个参数,这只是我尝试的其他东西的结转)

现在:我想使用标签和 OnMouseMove 在报告中显示按钮的编号,以便用户在单击按钮之前可以看到部分 ID。

麻烦的是,当我复制我的函数时,Access 似乎没有将 nSekNr 变量作为参数发送。我通过使用新功能来做到这一点

Public Function MapButtonShowID(sBtnName As String, nSekNr As Integer)
Me.sekshow.Visible = True
Me.sekshow.Caption = "Sektion: " & sSekNr
End Function

其中 sekshow 是一个空标签。我像这样在点击事件的初始化下方调用它

 For Each ctl In Me.Controls
If ctl.ControlType = acCommandButton Then
nSekNr = ParseNumber(ctl.Name, 6)
  ctl.OnClick = "=MapButtonClick('" & sBtnName & "', '" & nSekNr & "')"
 ctl.OnMouseMove = "=MapButtonShowId('" & sBtnName & "', '" & nSekNr & "')"
[...]

这给了我一个空的“Sektion:”,没有报告上的数字。

现在开始奇怪的事情:我通过添加一个 MsbBox 来检查 nSekNr 是否正确地赋予了任一函数。我的意思是,如果点击事件有效,那是因为给出了正确的 nSekNr。结果这两个函数都没有接收到变量——它是空的!

但是为什么我的点击事件会起作用呢?有问题的报告实际上没有任何内部过滤,它只是显示一些数据的基本报告。

我搞不清楚了。

手动分配事件几乎不是一种选择,因为有很多。

也许有一种方法可以正确地做到这一点,并弄清楚为什么即使参数为空,点击事件仍然有效?

4

1 回答 1

0

谜底解开了,是笔误。很抱歉浪费您的时间,但如果有人希望为报表中特定类型的每个控件动态分配事件过程,该功能将按预期工作。不过,这可能需要 Access 2010

于 2013-01-07T09:51:26.793 回答