如何从窗体导航到不同形式的子窗体?

问题描述:

我正在研究分为多个部分的Access数据库。每个嵌套标签都有一个带有子表单的主表单。如何从窗体导航到不同形式的子窗体?

演练

我们有一个出发区被分成不同的主题。这些主题表单具有代表SubThemes的按钮。

The starting Form in Theme 2

当我击按钮我要离开MainForm的1至2 MainForm的副主题A(简单,因为它是默认值)。

当我击按钮BI要离开MainForm的1至2 MainForm的副主题B.(我不能得到这个工作)

Main Form 2 - SubTheme2 opened per default on Subform A

我所知道的

我可以很容易地从Mainform 1到Mainform 2着陆,默认主题1

Private Sub buttonB_Click() 
    DoCmd.openForm "Mainform2", _ 
End Sub 

我不知道如何导航到Mainform2-> Sub Theme B.我可以使用OpenArgs打开正确的子窗体,但是我不能用Tabs来完成。我试图在mainform2的onLoad()中使用DoCmd.browseTo,但是打破了这个过程。

如果我没有弄错,应该有一种方法来使用buttonB_click()中的DoCmd.browseTo,但我无法获得正确的路径。

DoCmd.OpenForm Method (Access)

DoCmd.BrowseTo Method (Access)

我试图说明问题尽可能通用这样的答案可以成为别人有帮助。我希望你可以帮助我!

+1

您是使用选项卡控件还是导航控件进行导航? –

+1

看看是否有帮助:https://*.com/questions/44529082/change-navigation-tab-on-navigation-control-of-access/44529794#44529794 –

+0

我相信我使用的实现是NavigationControl。 Kostas的例子是在选项卡控制上,并且不起作用。 – whoami

所以我设法解决这个问题:

首先我们定位到THEME2的主要表格,并与OpenArgs的帮助,告诉它我们需要哪个话题:

Private Sub buttonThemeB_Click() 
    DoCmd.openForm "Mainform2", _ 
    OpenArgs:="Theme B" 
End Sub 

在FormLoad() Mainform2我们检查OpenArgs和导航窗体-CONTROLE:

Private Sub Form_Load() 

    Dim strSubFormToken As String 

    ' If OpenArgs property contains a subform name, open corresponding subform 
    If Me.OpenArgs <> 0 Then strSubFormToken = Me.OpenArgs 

    Select Case strSubFormToken 
    Case "Theme A" 
     strSubForm = "form_themeA" 
    Case "Theme B" 
     strSubForm = "form_themeB" 
    End Select 

    strSubForm =  
    If Len(strSubForm) > 0 Then 
    DoCmd.BrowseTo acBrowseToForm, strSubForm, "frmTheme2.Navigationsunterformular" 'Your Navigationtarget 
    End If 

End Sub 

的Mainproblem在这一切的是,如果你使用DoCmd.BrowseTo路径对照子窗体OL你要知道,没有记载的一些规则:

的“>”字符似乎不寻常的,这是因为它已经为BrowseTo的Path参数具体介绍了。它的含义是这样的:“>”字符右边的表单被加载到其左侧指定的子表单控件中。

  • 该路径必须指定一系列Form。SubFormControl对。指定的每个子窗体控件都必须是其路径之前的窗体中的控件。
  • 对必须用“>”字符分隔。 ,最重要的是:(或浏览器窗口,如果应用程序在网络上运行)
  • 该路径中的第一种形式必须是目前在Access窗口直接加载形式这意味着只有Path参数允许您更改当前可见的子窗体控件的内容。

因此,我们必须在导航子控件之前首先打开新的主窗体。

似乎是处理此问题的最佳方法。 感谢您的建议!