Forms 在导航子窗体之间切换时保持对记录的关注

Forms 在导航子窗体之间切换时保持对记录的关注,forms,ms-access,vba,Forms,Ms Access,Vba,我开始为办公室的各个部门开发一个UI,以支持查看和编辑客户记录 我有一个导航表单,每个选项卡都是数据库中一个单独的表。一个是特定于客户的信息,如SSN、名/姓等。下一个是地址,下面是联系信息、订单等 第一种形式是他们选择客户的地方。以下所有表格将取决于他们在此处选择的人员。我需要能够保留第一个表单中的记录ID,因为它们在其他地方导航。当前,窗体每次失去焦点时都会重置 有没有办法实现这一点?以下表单将根据它们在第一对表单中选择的内容进行筛选。将记录ID存储在表单的标记属性中 然后: 如果加载新表

我开始为办公室的各个部门开发一个UI,以支持查看和编辑客户记录

我有一个导航表单,每个选项卡都是数据库中一个单独的表。一个是特定于客户的信息,如SSN、名/姓等。下一个是地址,下面是联系信息、订单等

第一种形式是他们选择客户的地方。以下所有表格将取决于他们在此处选择的人员。我需要能够保留第一个表单中的
记录ID
,因为它们在其他地方导航。当前,窗体每次失去焦点时都会重置


有没有办法实现这一点?以下表单将根据它们在第一对表单中选择的内容进行筛选。

记录ID
存储在表单的标记属性中

然后:

  • 如果加载新表单,可以将其传递给表单的
    .OpenArgs
    属性
  • 如果加载子窗体,可以通过
    .Parent.Tag
    属性获取它
用户选择一条记录:

  Me.Tag = Me![Record ID]
打开新表单:

'Open form
DoCmd.OpenForm "frmName", acNormal, , , acFormPropertySettings, acWindowNormal, Me.Tag

'Filter Form
Private Sub Form_Load()
    With Me
        If Not IsNull(.OpenArgs) Then
            .Filter = "[Record  ID]=" & .OpenArgs
            .FilterOn = True
        End If
    End With
End Sub
正在加载子窗体:

'Filter Form
Private Sub Form_Load()
    With Me
        If Not IsNull(.Parent.Tag) Then
            .Filter = "[Record  ID]=" & .Parent.Tag
            .FilterOn = True
        End If
    End With
End Sub

最后,如果在表单之间导航,请将其存储在每个表单的Tag属性中。

虽然导航表单没有实现,但下面有一篇关于同步子表单的文章和完整演示:


可能必须设置全局变量或使用临时变量。我建议不要使用导航表。我不喜欢它,也从来没用过。我将子窗体放在选项卡控件上。表单可以嵌套7层。此外,我还不太熟悉nav表单和表格控件之间的区别。我的印象是nav表单改进了加载时间,所以我选择了它们。选项卡而不是表格控件。是的,导航表单在初始打开时应该更快,因为一次实际上只打开一个子表单。如果要从一个子窗体引用另一个子窗体,这会使引用子窗体变得困难。而使用选项卡控件,则会加载所有子窗体。但这会导致明显的性能问题吗?取决于表单/子表单安排的大小和复杂性。是否有更好的文章来源?我写了参考文章。但据我对提问者的理解,子表单的过滤方式是相同的,因此在浏览这些表单时需要同步,而FMS的文章是关于(sub)\u过滤的。但是,我从来没有使用过导航表单,所以我可能错过了一些东西。好吧,很久没有访问过专家交流了。当我需要成为付费会员才能查看论坛帖子时,我就退出了访问。没有经过我第一次打开链接时出现的弹出窗口,没有意识到这是一篇免费文章。我没有注意作者的名字。不知道是有人抄袭了某人,还是有着相同想法的伟大人物。但有时,相同的概念,只是有点不同,可以帮助得到的信息。我认为FMS文章确实讨论了在主窗体上使用文本框作为链接标准的技术,但不需要VBA.OK。但是同步两个或多个子表单通常意味着在一个子表单中选择一条记录会强制非当前子表单上的当前记录遵循当前子表单上当前记录的ID。我得到的印象是海报的子表单绑定到不同的表源,但需要“父”和“子”以及“孙”并排(或在选项卡上)这样所有表单都可以是连续视图表单。所以,请像使用全局变量一样使用主表单标记属性?这是否适用于导航表单?或者您是否建议使用普通表单/子表单并将不同的子表单加载到同一容器控件中?@June7假设一个表单(至少)将始终被加载,我们可以使用其.Tag属性作为全局变量。可以是简单的父/子或在不同的单个窗体之间浏览。类似于TempVar,但在某种程度上更容易。