0

我正在尝试通过使用 CallByName 和对象循环将某些图像的可见性设置为 false。

这是代码

Private Sub command1Click
dim theobj_str as string
dim ctr as integer
for ctr = 1 to 3
   theobj_str = "Images" & ctr
   CallByName theobj_str, "Visible", vbLet,False
end for
END SUB

它在“”上引发错误“TYPE MISMATCH CallByName **theobj_str**...

CallByName 将对象作为其第一个参数。我需要以某种方式将字符串“theobj_str”转换为对象。我怎样才能做到这一点 ?

如果我这样称呼它,CallByName 就可以正常工作:CallByName Images2, "Visible", vbLet,False

谢谢

4

1 回答 1

1

如果您不需要使用 CallByName,您可以遍历控件集合并检查类型。如果类型与您要隐藏的控件匹配,那么您可以通过这种方式设置它的可见属性。

代码如下所示:

Private Sub Command_Click()

    SetControlVisibility "Image", False

End Sub

Private Sub SetControlVisibility(ByVal controlType As String, ByVal visibleValue As Boolean)
Dim ctrl As Control

    For Each ctrl In Me.Controls
        If TypeName(ctrl) = controlType Then
            ctrl.Visible = visibleValue
        End If
    Next

End Sub

这样做可以让您在表单中添加更多图像控件,而无需记住在 for 循环中更改计数。

希望有帮助。

于 2018-03-13T09:49:38.060 回答