MS-Access 导航窗格是不是可见?
Posted
技术标签:
【中文标题】MS-Access 导航窗格是不是可见?【英文标题】:Is the MS-Access Navigation Pane visible?MS-Access 导航窗格是否可见? 【发布时间】:2017-05-26 04:08:25 【问题描述】:以下关闭访问导航窗格的代码有效。
DoCmd.NavigateTo "acNavigationCategoryObjectType"
DoCmd.RunCommand acCmdWindowHide
但问题是,如果导航窗格已经关闭,那么 acCmdWindowHide 将隐藏任何其他打开的对象(即表单、表格)。 我在代码中使用 DoCmd.TransferDatabase,执行此操作时,有时会打开导航窗格。如果出现有关数据导入的警告消息并且用户单击取消,则可能会发生这种情况。为了确保用户看不到我想要隐藏的窗格,但如果它已经隐藏,则没有什么可隐藏的,但上面的命令只是隐藏了我的表单,这不是我想要的。
线
DoCmd.NavigateTo "acNavigationCategoryObjectType"
总是被执行并且不返回任何东西。如果没有可导航到的导航窗格,它不会返回错误。
我的问题是:如何确定导航窗格当前是否打开,以便我知道我必须关闭它。 或者如果我使用上面的代码,如何确保我关闭导航窗格但没有其他对象?
【问题讨论】:
【参考方案1】:如何确定导航窗格当前是否打开,以便 我知道我必须关闭它。或者我怎样才能确保我关闭 如果我使用上面的代码,导航窗格但没有其他对象?
通过在将焦点设置到导航窗格之前按住 Application.CurrentObjectName
值,
然后将该值与DoCmd.NavigateTo ("acNavigationCategoryObjectType")
之后的Application.CurrentObjectName
进行比较,您可以判断导航窗格是否可以关闭。
我发现如果当前在导航窗格中设置了搜索过滤器,其他示例中建议的代码将失败。在某些情况下,这会导致活动表单关闭。这可能会导致糟糕的用户体验。这个例程应该解决这个问题。我只发现了两个限制:
-
导航窗格已打开,但没有其他对象打开。我想不出在这种情况下为什么要隐藏导航窗格的充分理由。
您从导航窗格打开 tblEmployee,它成为活动对象,然后运行此例程以隐藏导航窗格。它不会做任何事情,因为 tblEmployee 是活动对象名称,它也是导航窗格中的选定项。我不认为你会遇到这种情况,但YMMV。
在任何一种情况下,sub 都不会隐藏导航窗格,这比关闭活动表单要好。
Public Sub HideNavPane()
' This will hide the Navigation Pane.
' It works even if a search filter is set, unlike other solutions that may
' inadvertently close the active object.
' Limitations: An object (form, report, query, etc) must be open and it
' cannot be the same name as the selected item in the nav pane
' or this will do nothing.
Dim strCurrentObjectName As String
strCurrentObjectName = Application.CurrentObjectName
' Move focus to the navigation pane/database container
DoCmd.NavigateTo ("acNavigationCategoryObjectType")
If strCurrentObjectName <> Application.CurrentObjectName Then
' The Navigation Pane is open and has focus.
' Use the window menu to hide the navigation pane
DoCmd.RunCommand acCmdWindowHide
End If
End Sub
【讨论】:
【参考方案2】:This forum thread 建议:
Public Function HideIt()
' Employee is just any existing table
DoCmd.SelectObject acTable, "Employee", True
If Application.CurrentObjectName = "Employee" Then DoCmd.RunCommand acCmdWindowHide
End Function
【讨论】:
谢谢,这对我有用。但有一个例外:如果使用任何过滤器仅显示导航窗格中的某些对象,并且此过滤器不允许 CurrentObjectName,则上述代码不起作用,因为永远无法选择具有该名称的对象。示例:过滤器“客户”用于仅显示名称为客户的对象。如果上面的代码尝试选择即使导航窗格打开也无法选择的员工,因为过滤器不允许这样做。隐藏导航窗格后,此过滤器不会消失。对我来说没问题。以上是关于MS-Access 导航窗格是不是可见?的主要内容,如果未能解决你的问题,请参考以下文章
如果节点超出 javafx 的边界,是不是可以自动调整窗格大小