如何从表单中的字段名称确定对象类型?

How to determine the Object Type from the field name in a form?

我试图概括这个 Sub。该子程序适用于文本字段,无需对复选框进行测试。复选框没有 .BackStyle 也没有 .ForeColor 属性.

我试过下面的代码:

Private Sub EnableEdit(strFieldname As String, Optional bUseRed As Boolean = False)
    Me.Controls(strFieldname).Enabled = True
    Me.Controls(strFieldname).Locked = False
    If Not(TypeOf (Me.Controls(strFieldname)) Is CheckBox) Then
        Me.Controls(strFieldname).BackStyle = 1
        If bUseRed Then
            Me.Controls(strFieldname).ForeColor = vbRed
        Else
            Me.Controls(strFieldname).ForeColor = vbBlack
        End If
    End If
End Sub

但是

If Not(TypeOf (Me.Controls(strFieldname)) Is CheckBox) Then

语法不正确。 TypeOf 需要一个对象,Me.Controls(strFieldname) 是控件本身。

我尝试了 Me.Controls(strFieldname) 的替代方法。

https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/early-late-binding/determining-object-type

If Not(TypeOf (Me.Controls(strFieldname)) Is CheckBox) Then行有问题:

  1. 正确的语法是:
If Not TypeOf Me.Controls(strFieldname) Is CheckBox Then

如果您使用的是标准访问控制,最简单的方法就是访问 ControlType 属性

If Not Me.Controls(strFieldname).ControlType = acCheckbox Then

对于特殊控件,TypeOf 可能很有用。您需要指定 class,这可能是 Access.Checkboxmsforms.Checkbox 也可以在 Access 中使用,但非常不常见)。

If Not TypeOf Me.Controls(strFieldname) Is Access.Checkbox Then

顺便说一下,你的错误的主要原因是括号的使用过多。如果用括号将对象括起来,则会得到其默认值 属性:

Me.Controls("MyCheckbox") 'A checkbox

(Me.Controls("MyCheckbox")) 'The value of a checkbox