【问题标题】:Issue in Dynamic loading ActiveX in VB6.0VB6.0中动态加载ActiveX的问题
【发布时间】:2012-04-02 21:20:50
【问题描述】:

我有以下方法用于动态加载 ActiveX 控件,

Dim ctl As Control
Set ctl = Form1.Controls.Add("prog.id", "myctl")
ctl.Visible = True

使用此代码控件成功显示在窗体上,但是当我尝试访问控件ctl.mymethod() 的方法/属性时,它给出错误,“对象不支持此方法或属性”。

其次当我使用这种方法时

Dim ctl As Object
Set ctl = CreateObject("prog.id")
Ctl.mymethod()

从控件成功调用了这里的方法,但是我不能在表单上显示这个对象。

请告诉我有关此问题的任何解决方案。

编辑:

使用以下方法在我调用方法时也会出现错误,“对象不支持........”

Dim ctl As Object
Set ctl = Controls.Add("prog.id", "myctl")
ctl.Visible = True

【问题讨论】:

    标签: vb6 activex


    【解决方案1】:

    不要将引用声明为Control。那只会让您访问Control 接口成员。 尝试将ctl 声明为Object,然后它将完全延迟绑定。

    Dim ctl As Object
    Set ctl = Controls.Add("COMCTL.ListViewCtrl", "myctl")
    ctl.Visible = True
    ctl.View = 2
    ctl.ListItems.Add , , "123"
    

    【讨论】:

    • 感谢您的回复,但使用第二种方法如何在表单上添加此控件?
    • 不能,需要在运行时使用Controls.Add给表单添加控件。
    • 为我工作。如果您需要进一步的帮助,您将需要提供更具包容性的代码示例。 (它也可以将其声明为Control
    【解决方案2】:

    如果您有控件的类型库 (.tlb),请添加对它的引用并尝试此操作

    Dim ctl As prog.id
    Set ctl = Controls.Add("prog.id", "myctl").Object
    ctl.mymethod
    

    注意.Object 属性的用法。

    【讨论】:

    • 我没有 .tlb 文件,只有在系统上注册的 OCX。我想访问 ActiveX 的属性,在 ActiveX 中我使用这个方法来公开属性 Public Property Let ShowSelection(bShow As Boolean)
    • 如何从 ocx 文件中获取 tlb 文件?
    • @Siddiqui 如果 OCX 是用 VB6 创建的,那么它有一个嵌入的 TypeLib。您是否在项目中添加了对 ocx 的引用?如果你这样做了,你可以按 F2 并使用对象浏览器视图,你应该会看到你的控件,并且你应该能够通过代码中的类型名称来引用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2019-10-30
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多