【问题标题】:callbyname vb6 using string as argumentcallbyname vb6 使用字符串作为参数
【发布时间】:2018-03-12 10:22:17
【问题描述】:

我正在尝试通过使用 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

它在“CallByName **theobj_str**...”上抛出错误“TYPE MISMATCH”

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

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

谢谢

【问题讨论】:

  • CallByName 需要一个对象(例如,表单、类等)作为第一个参数,第一个参数不能是字符串。 CallByName 允许您使用字符串值间接(本质上是后期绑定)访问对象的属性和方法。如果您的对象是一个表单,您可以先通过表单名称搜索表单集合来找到表单,然后使用表单引用作为CallByName 参数。
  • 我想我走到了死胡同。我会找到新方法的。谢谢马克。

标签: vb6 callbyname


【解决方案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 循环中更改计数。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2011-12-21
    • 2016-09-23
    • 2021-08-10
    • 2011-12-11
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    相关资源
    最近更新 更多