我有一个Access2003表单,我希望将几个控件组合在一起并以编程方式更改可见性,尽管是VBA代码。
这可能吗?我知道我可以通过格式对项目进行分组 - >分组,但如果我这样做,我如何在我的代码中引用整个组?
谢谢
答案 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 属性对这些控件执行不同的操作。