【问题标题】:Retain focus on a record while switching between navigation subforms在导航子表单之间切换时保持对记录的关注
【发布时间】:2017-07-16 21:31:17
【问题描述】:

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

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

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

有没有办法启用它?以下表格将根据他们在第一对中选择的内容进行过滤。

【问题讨论】:

  • 可能需要设置一个全局变量或使用 TempVars。我建议不要使用导航表单。我不喜欢它,从未使用过。我将子窗体放在 Tab 控件上。表格可以嵌套 7 层。另请查看fmsinc.com/MicrosoftAccess/Forms/Synchronize/LinkedSubforms.asp
  • 我对导航表单和表格控件之间的区别不够熟悉。我的印象是导航表单可以缩短加载时间,这就是我选择它们的原因。
  • 制表符不是表控件。是的,导航表单在初始打开时应该更快,因为一次实际上只有一个子表单打开。如果您想从另一个引用子窗体,这可能会使引用子窗体变得困难。而使用选项卡控件,所有子窗体都被加载。但这慢得多会导致明显的性能问题吗?取决于表单/子表单排列的大小和复杂性。

标签: forms ms-access vba


【解决方案1】:

Record ID 存储在表单的Tag 属性中。

然后:

  • 如果加载新表单,您可以将其传递给表单的.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 属性中。

【讨论】:

  • 那么像全局变量一样使用主表单标签属性?这适用于导航表单吗?还是您建议使用普通表单/子表单并将不同的子表单加载到同一个容器控件中?
  • @June7 假设一个表单(至少)总是被加载,我们可以使用它的 .Tag 属性作为一个全局变量。要么是简单的父/子,要么在不同的单一表单之间浏览。类似于 TempVar,但在某种程度上更容易。
【解决方案2】:

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

Synchronizing Multiple Subforms in Access

【讨论】:

  • 来源?我写了参考文章。但据我了解提问者,子表单的过滤方式相同,因此在浏览这些时需要 同步,而 FMS 文章是关于 (sub)_filtering_ 的。但是,我从不使用导航表单,所以我可能遗漏了一些东西。
  • 好了,好久没来专家交流了。当它要求我成为付费会员才能查看论坛主题时,我退出了访问。当我第一次打开该链接时,没有跳过出现的弹出窗口,没有意识到这是一篇免费文章。我没有注意作者的名字。不知道是有人抄袭了某人还是只是思想相似的伟大思想。但有时相同的概念表述稍有不同可以帮助传达信息。而且我认为 FMS 文章确实讨论了主窗体上的文本框作为链接标准的技术,但不需要 VBA。
  • 好的。但同步两个或多个子表单通常意味着选择一个子表单中的记录会强制非当前子表单上的当前记录遵循当前子表单上当前记录的 ID。跨度>
  • 我得到印象海报的子表单绑定到不同的表源,但希望并排(或在选项卡上)“父”、“子”和“孙子”,因此所有表单都可以是连续视图表单.
猜你喜欢
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 2018-07-21
相关资源
最近更新 更多