退出数据库时,隐藏导航窗格会导致问题



我刚刚发现MS Access 2016有些奇怪。我有一个数据库,里面有两个表单:一个是隐藏的,一个是菜单。autoexec将打开隐藏的窗体,而该窗体将打开菜单窗体

我取消了当前数据库下的一些选项,例如[显示导航窗格]和[允许完整菜单]。

我在菜单表单上有一个退出按钮/命令。点击后,它会调用DoCmd。退出但在退出之前,我会收到一个MS Access窗口,询问窗体打开时的参数,而不是关闭时的参数。

经过大量的测试,我意识到这个问题与我禁用[显示导航窗格]有关。如果我保留导航窗格,但取消选中所有"对象类型",则一切正常。

所以,我的问题是,为什么禁用导航窗格会产生这样的问题,有办法解决吗?

是的,我的解决方案有效,但我不喜欢它,因为用户可以使用快门栏打开和关闭导航窗格;什么都没有显示,但它仍然会分散注意力,用户可以请求支持。

这个问题并不是因为第一种形式是隐藏的,而是因为它是开放的。如果我添加DoCmd。关闭我的DoCmd前的acForm"F_Parameter"。退出就行了。

很容易重现问题:

创建一个新的数据库

创建两个表单:
F_Parameter
F-Menu

创建名为Autoexec的宏:
OpenForm
窗体名称:F_Parameter
窗口模式:隐藏

在F_Parameter表单中,创建事件On Load

Private Sub Form_Load()
DoCmd.OpenForm “F_Menu”
End Sub

在F_Menu表单中,创建一个名为Btn_Exit的按钮,该按钮带有点击事件

Private Sub Btn_Exit_Click()
DoCmd.Quit
End Sub

在F_Menu表单中创建一个加载事件

Private Sub Form_Load()
MsgBox “Hello”
End Sub

转到"文件"、"选项"、"当前数据库",然后
取消选中"显示导航窗格"和
不选中"允许完整菜单">

保存、退出并打开数据库:你会得到一个"你好",因为F_Menu窗体打开了,现在点击出口,你会得到另一个"Hello"。第二个不应该在那里,因为表单应该是关闭的,而不是打开的。

我能够重现所描述的问题。我认为这与导航窗格没有任何关系。

之所以发生这种情况,是因为当DoCmd.Quit事件发生时,隐藏的F_Parameter形式正在变为"1";取消隐藏";以便Access关闭它。这会导致F_ParameterForm.Load事件运行,这实际上是在打开F_Menu,从而导致F_Menu上的Form.Load事件运行。

我能够通过首先显式关闭F_Parameter,然后退出来解决这个问题

DoCmd.Close ObjectType:=acForm, ObjectName:="F_Parameter", Save:=acSaveNo

DoCmd.Quit

最新更新