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

zoh*_*air 4 forms ms-access controls grouping vba

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

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

谢谢

Joe*_*eau 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
Run Code Online (Sandbox Code Playgroud)


Dav*_*ton 5

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

  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
Run Code Online (Sandbox Code Playgroud)

要隐藏控件,您可以这样做:

  Call ShowControls(mcolGroupABC, False)
Run Code Online (Sandbox Code Playgroud)

并向他们展示:

  Call ShowControls(mcolGroupABC, True)
Run Code Online (Sandbox Code Playgroud)

这很简单,不是吗?

这是我一直在我的应用程序中使用的那种代码,自从大约 10 年前我第一次实现它以来,我一直在使用它,并注意到使用自定义集合而不是遍历整个 Controls 集合。

唯一需要注意的是,如果其中一个控件具有焦点,如果您尝试隐藏它,它将出错。这很容易解决,因为如果您要隐藏一组控件,那么在这样做之前您肯定有一个合适的位置来设置焦点。