【问题标题】:Disable all controls in 'details' section of a MS Access form禁用 MS Access 表单的“详细信息”部分中的所有控件
【发布时间】:2012-10-21 22:03:35
【问题描述】:

我正在寻找一些命令,它将禁用 MS Access 表单的“详细信息”部分中的所有控件。一种方法是单独禁用每个控件。我正在寻找一种独立于控件的方式,它可以禁用 MS Access 表单的详细信息部分中存在的所有控件。

如果要根据一些登录凭据启用表单并且输入凭据的字段位于表单的标题部分,则此功能可能很有用。因此,一旦用户登录,该表单中的所有控件都会启用。 Uplon注销,它们将被禁用。

我尝试搜索它,但似乎不支持它。或者以前没有人有这样的要求。

如果有人知道,请帮助我。

【问题讨论】:

    标签: vba ms-access ms-access-2010


    【解决方案1】:

    表单具有符合此要求的各种属性:允许编辑、允许添加和允许删除。允许编辑适用于未绑定的控件,甚至适用于未绑定的表单。

    如果您需要禁用某些控件,可以将这些控件的 tab 属性设置为字符串,然后遍历表单的控件集合以禁用这些控件。

    Dim frm As Form
    Dim ctl As Control
    
    Set frm = Forms!MyOpenForm
    
    For Each ctl In frm.Controls
    
        If ctl.ControlType <> acLabel And ctl.ControlType <> acTabCtl Then
            If ctl.Tag = "AdminHide" Then
                If varWho = "Authorized" Then
                    ctl.Visible = True
                Else
                    ctl.Visible = False
                End If
            End If
    
        End If
    
    Next
    

    【讨论】:

    • 感谢您的回答。我正在寻找禁用所有绑定和未绑定控件。我相信,AllowEdits 等仅适用于绑定控件。如果我错了,请纠正我。
    • 我正在尝试您建议的代码。在一个地方,我被卡住了。一旦我尝试运行代码,它就会在 If 语句中显示未为“frm”定义的变量。知道为什么会这样吗?
    • 这是一个sn-p。我会添加更多细节。
    • 我正在尝试实施该解决方案。我一到达某个地方就会更新。谢谢一百万……!!
    • 很高兴它对你有用。我使用表单标签来保存从隐藏表单更新的信息,例如:If blnOK = True Then; Me.Tag = AddCompany(Me); Me.Visible = False; End If Handy for not in list events。
    【解决方案2】:

    您可以直接禁用详细信息部分中的所有控件,而无需打扰标签:

    Dim ctrl As Control
    For Each ctrl In Detail.Controls
        If (TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox)
            ctrl.Enabled = False
        End If
    Next
    

    同样,您可以使用FormHeader.ControlsFormFooter.Controls 访问页眉和页脚中的控件。

    我通常更喜欢使用ctrl.Locked = True 而不是ctrl.Enabled = False,因为用户仍然可以从锁定的控件中复制文本并对其使用文本过滤器,但这取决于你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多