在MS-Access中以编程方式隐藏列

时间:2009-11-14 08:03:57

标签: ms-access controls properties foreach

我想根据用户选择中的可变数据隐藏或显示列。如何在MS-Access 2003中将列设置为隐藏?

例如,

用户更改活动后......

For Each ctl In Me.FormNameHere.Form.Controls
    If (TypeName(ctl) = "Textbox") Then
        If InStr(GetTextList(), ctl.Name) > 0 Then
            ctl.hidden = True
        Else
            ctl.hidden = False
        End If
    End If
Next ctl
  • 这种挑战的最佳方法是什么?
  • 有更明显的解决方案吗?

4 个答案:

答案 0 :(得分:5)

我不久前回答了similar question与数据表中隐藏列的问题。但是,您似乎想要隐藏排列在表单上的列中的文本框,这是正确的吗?

如果你有很多控件,迭代表单中的所有控件可能会很慢。如果你真的需要使用这样的文本框,那么你可以尝试将“列”组合在一起然后隐藏组。另一种方法是使用列表框或数据表来表示数据,您可以在其中直接更改列的布局。

答案 1 :(得分:5)

控件没有“隐藏”属性(Access中没有对象具有隐藏属性)。他们确实有.Visible属性。

为了将来参考,我建议您熟悉VBE中的对象浏览器 - 打开VBE并点击F2。然后,您可以将搜索范围限制为项目中使用的各个库。但是,确实需要一段时间才能理解对象模型。

此外,您可以依靠Intellisense来学习对象的属性/方法,因此在您正在使用的表单的代码中,您可以键入“Me.MyTextBox”。并且Intellisense下拉列表将显示该特定控件的所有属性和方法。它不适用于通用控制变量(如在代码中),因为不同的控件类型具有不同的属性。

当然,属性表给出了属性的名称,即使在代码中它们并不总是使用相同的拼写法(通常它们与删除的空格相同)。

此外,您可能希望如何执行此操作,具体取决于它是常规表单还是数据表表单。在数据表中,您的控件还具有.ColumnHidden和.ColumnWidth属性(在数据表视图以外的任何视图中设置这些属性都没有效果,并且标准属性表中没有这些属性可用,但保存时对它们的更改将保留形式)。

答案 2 :(得分:3)

我发现 ColumnHidden 属性可以解决问题。

For Each ctl In Me.FormNameHere.Form.Controls
    If (TypeName(ctl) = "Textbox") Then
        If InStr(GetTextList(), ctl.Name) > 0 Then
            ctl.Columnhidden = True
        Else
            ctl.Columnhidden = False
        End If
    End If
Next ctl

我从this related问题得到了提示。

答案 3 :(得分:2)

单线方法正在使用:

forms(fname).Controls(ctrlname).columnhidden = false

,其中   fname是表单的名称   ctrlname是控件的名称