dim obj as Object
set obj = Controls.add("Test.Control", "myControl")
obj.top = 30
........
obj.ServerName = "TestServer"运行上面代码的最后一句时报告错误:Objcet doesn't support this property or method
但是 ServerName 属性确实存在的。不知道如何解决此问题,请告诉解答!当然在工程中并没有对这个控件的引用,在引用的前提下必须在界面上托一个此控件才可以用Add方法

解决方案 »

  1.   

    http://www.moon-soft.com/download/ocx/dyncontrol.zip
      

  2.   

    lxcc(虫子|需要点勇气和信心)
    并没有解决我提到的问题。
    Left等属性是可以设置的,但是自定义的属性如何赋值呢?
      

  3.   

    下面是控件里面的源代码Private m_strServerName As StringProperty Let ServerName(strServerName As String)
        m_strServerName = strServerName
        PropertyChanged "ServerName"
    End PropertyProperty Get ServerName() As String
        ServerName = m_strServerName
    End PropertyPrivate Sub UserControl_InitProperties()
        ServerName = ""
        m_strServerName = ""
    End SubPrivate Sub UserControl_ReadProperties(PropBag As PropertyBag)
        ServerName = PropBag.ReadProperty("ServerName", "")
    End SubPrivate Sub UserControl_WriteProperties(PropBag As PropertyBag)
        PropBag.WriteProperty "ServerName", m_strServerName
    End Sub
    有一个ServerName的属性以下是测试程序代码:
    Dim obj As Object
    Private Sub Form_Load()
        Set obj = Me.Controls.Add("testOcx.TestControl", "test")
        obj.Left = 30
        obj.Top = 30
        obj.Visible = True
        obj.ServerName = "testServer"
    End Sub
     
    运行到 obj.ServerName = "testServer"
    就报告错误
      

  4.   

    我这儿没有这种问题啊。这样吧,你打代码发给我吧:ayusay#163.com   (把#换成@)
      

  5.   

    ayusay(阿于) 
    代码已经发送到你的信箱了,请查收!
      

  6.   

    你把所有的设计窗体都关闭,然后运行试一下。如果还是不成,那就再打开你的Form窗体,在其上添加一个testOcx.TestControl,然后删除。再运行试试。
      

  7.   

    如果还是不行,就按Ctrl+F5(全编译执行),应该可以的。我刚才按这个步骤走了一遍就可以了估计问题是由于UserControl未被编译过,所以无法运行。全编译执行后,系统会生成相应的oca文件。
    在窗体上显示时,使用的是oca文件而不是ocx本身。
      

  8.   

    ayusay(阿于) 
    按照你的步骤做了,还是不行的。
    我先把控件编译了,然后再进行测试,还是一样的不行的。另外我测试了控件的公用方法,同样不能使用。难道我的VB有问题?
      

  9.   

    我又试了,打开你的Form窗体,在其上添加一个testOcx.TestControl,然后删除再运行就可以了。另外,要把主工程属性里“生成”选项卡下的“删除有关未使用的ActiveX控件的信息”取消选中。你再试试不用动态添加,而是直接在窗体上放一个控件试试
      

  10.   

    多谢上面的兄弟们,我的机器不知道怎么回事情,你们提供的方法都试过了,就是不灵!
    我的VB是SP5,Windows2000 Professional
      

  11.   

    ayusay(阿于)
    如果在工程中引用了此控件,是没有问题的。
    我本来不想在工程中引用此控件。
      

  12.   

    ayusay(阿于)兄弟
    你的方法确实可行,不知道你这样做是否在工程中已经引用了此控件呢?
    现在能行的就是需要引用,如果不引用还是不行的。
    不知道VB在处理这个方面的操作的原理是什么,按照道理,应该可以不用引用的。莫非VB必须引用,然后对引用的内容在编译的时候进行了解析?
      

  13.   

    我的环境是VB6SP6.对于此控件,我是放在部件面板上的。至于工程的窗体上,是先放一个再删除掉。应该是与预编译有关。