在Access表单上将控件组合在一起

时间:2009-11-02 14:54:11

标签: ms-access forms vba controls grouping

我有一个Access2003表单,我希望将几个控件组合在一起并以编程方式更改可见性,尽管是VBA代码。

这可能吗?我知道我可以通过格式对项目进行分组 - >分组,但如果我这样做,我如何在我的代码中引用整个组?

谢谢

4 个答案:

答案 0 :(得分:13)

您可以将所有控件放在组框控件中,然后更改组框本身的可见性。

您还可以在要分组的每个控件的tag属性中添加一个值,然后在VBA循环中通过控件并检查该值并更改其中的可见性。

将要分组的所有控件的tag属性设置为groupABC或任何你想要的东西。

然后在代码中的某处使用它来遍历表单控件并检查它。

Dim ctrl As Control
For Each ctrl In Me.Controls
    If ctrl.Tag = "groupABC" Then
        ctrl.Visible = False
    End If
Next

答案 1 :(得分:4)

要详细说明我对使用自定义集合的评论,您可以在表单的模块中执行以下操作:

  Private mcolGroupABC As New Collection

  Private Sub IntializeCollections()
    Dim ctl As Control

    If mcolGroupABC.Count = 0 Then
       For Each ctl in Me.Controls
         If ctl.Tag = "GroupABC" Then
            mcolGroupABC.Add ctl, ctl.Name
         End If
       Next ctl
       Set ctl = Nothing
    End If
  End Sub

  Private Sub Form_Load()
    Call InitializeCollections
  End Sub

  Private Sub ShowControls(mcol As Collection, bolShow As Boolean)
    Dim ctl As Control

    For Each ctl In mcol
      ctl.Visible = bolShow
    Next ctl
    Set ctl = Nothing
  End Sub

要隐藏控件,请执行以下操作:

  Call ShowControls(mcolGroupABC, False)

并向他们展示:

  Call ShowControls(mcolGroupABC, True)

这很简单,不是吗?

这是我在我的应用程序中一直使用的代码,自从我第一次实现它以来,我已经使用过它,大约10年前,并注意到显示/隐藏显然更快使用自定义集合的控件比遍历整个Controls集合的控件。

唯一需要注意的是,如果其中一个控件具有焦点,如果您尝试隐藏它,则会出错。这很容易解决,因为如果你隐藏了一组控件,你肯定有一个合适的位置来设置你的焦点。

答案 2 :(得分:1)

我喜欢Joel Gauvreau建议的标签属性。其他可能性包括选项卡控件和/或子表单。

答案 3 :(得分:1)

更有效的方法是将所有相关控件添加到选项卡控件。您使用单个页面创建 Tab 控件,然后将 Tab 控件 Style 设置为 None,将 Back Style 设置为 Transparent。通过这种方式,Tab 控件的视觉外观逐渐消失,但其分组语义仍然存在。然后将控件添加到页面,或者在里面创建它们,或者将现有控件剪切+粘贴到页面中(记住在粘贴后重新启用事件过程)。

如果只是可见性问题,现在您只需设置 Page 控件的 Visible 属性,所有属于它的控件都会显示或隐藏。

但是,如果您需要对每个分组控件做一些更精细的操作,您可以使用以下命令遍历它们:

  Dim ctl As control
  
  For Each ctl In page_control.Controls
     ctl.Visible = False
  Next

您还可以使用 .Tag 或 .Type 属性对这些控件执行不同的操作。