2

我仍在摆弄 MS Access,这让我发疯。我当前的问题如下:我将记录导航栏重新创建为子窗体并将其添加到我的主窗体中。此代码用于子表单

...
Private WithEvents frmParent As Access.Form
...

Private Sub Form_Load()
   ...
   Set frmParent = Me.Parent
   frmParent.OnCurrent = "[Event Procedure]"
   frmParent.Recordset.MoveLast
   frmParent.Recordset.MoveFirst
   ...
End Sub

Private Sub frmParent_Current()
   If frmParent.CurrentRecord = frmParent.Recordset.Count Then
       Me.butNext.Enabled = False
   Else
       Me.butNext.Enabled = True
   End If
   If frmParent.CurrentRecord = 1 Then
       Me.butPrevious.Enabled = False
   Else
       Me.butPrevious.Enabled = True
   End If
End Sub
...
Other MainForm Events...

由此产生了一些问题。首先: MainForm 中的任何事件都不会触发。第二:有时(尤其是在错误之后)vba 会丢失对主窗体的引用。我可以将 Win32 API 解决方法与 CopyMemory 一起使用,但这似乎有点矫枉过正。

我一如既往地感谢任何帮助。

非常感谢

乔恩

4

1 回答 1

1

实际上,这似乎是 Access 中的一个错误......只需为有问题的父表单创建一个代码文件,即使它保持为空并且一切正常。

编辑:我必须纠正自己。这是预期的行为。摘自 Litwin 等人:Access 2002 Desktop Developer's handbook, p. 508

...如果您使用 WithEvents 变量来响应表单的事件,则表单必须具有关联的模块。也就是说,如果 HasModule 属性为 False,Access 不会为表单引发事件,因此任何希望对表单事件做出反应的表单外部代码都不会被 Access 调用。

于 2013-11-29T19:04:05.613 回答