【问题标题】:Hide a column programmatically in MS-Access在 MS-Access 中以编程方式隐藏列
【发布时间】:2009-11-14 08:03:57
【问题描述】:

我想隐藏或显示基于来自用户选择的可变数据的列。如何在 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
  • 应对此类挑战的最佳方法是什么?
  • 有更明显的解决方案吗?

【问题讨论】:

    标签: ms-access controls properties foreach


    【解决方案1】:

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

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

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

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

    此外,根据是常规表单还是数据表表单,您可能希望执行此操作的方式有所不同。在数据表中,您的控件还具有 .ColumnHidden 和 .ColumnWidth 属性(在数据表视图以外的任何视图中设置这些属性均无效,并且这些属性在标准属性表中均不可用,但在保存时会保留对它们的更改表格)。

    【讨论】:

    • 好吧,我找到了对 ctl.ColumnHidden = True 的引用,它似乎运行良好。感谢您使用对象浏览器的想法,但正如您已经提到的,这在我的情况下不可用,因为我正在使用 ctl 变量迭代几个不同的对象。
    • .ColumnHidden 仅适用于数据表视图。 .Visible 适用于所有视图。如果您查找特定控件类型(例如 TextBox)的属性,对象浏览器就会完成这项工作。它是 Intellisense 不适用于泛型 Control 的变量。
    • 考虑给予信用.. +1,+回答。但是,我觉得有趣的是,有人会看到值得回答的问题,但不会对问题本身进行投票。
    • 我不知道我应该对这些问题进行投票。我通过对这些问题进行投票来给予答案。我看不出对一个问题进行投票的意义,无论是向上还是向下。
    • 这会告诉其他读者您是否认为这个问题是个好问题。
    【解决方案2】:

    不久前,我回答了similar question,这与隐藏数据表上的列有关。但是,您似乎想隐藏在表单上按列排列的文本框,对吗?

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

    【讨论】:

    • 感谢您的提示。我有有限数量的控件,所有这些都是文本框,到目前为止性能不是问题。
    • 如果您有无限数量的控件,隐藏它们将是您的最小问题。 =)
    【解决方案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问题中得到了提示。

    【讨论】:

    • 我在原始答案中给了你 .ColumnHidden 作为一个选项,所以我为什么不为此获得荣誉?
    • 谢谢。在 LOAD 事件中为我工作。我需要添加“DoCmd.SetWarnings False”以避免出现询问我是否要保存设计更改的问题对话框。比在表单 CLOSE 事件中添加“DoCmd.SetWarnings True”。
    【解决方案4】:

    一种单行方法正在使用:

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

    在哪里 fname 是您的表单的名称 ctrlname 是您的控件的名称

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多