我想根据用户选择中的可变数据隐藏或显示列。如何在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
答案 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是控件的名称