动态生成按钮时,可以用这样的语句实现
Set cmdarr = Me.Controls.Add("VB.CommandButton", "cmdarr")
动态生成MSFlexGrid时,我是这样做的:
 Set msg = Me.Controls.Add("VB.MSFlexGrid", "msg")
返回错误:
Invalid class string.
Looking for object with ProgID: VB.MSFlexGrid
帮忙指正,谢了!

解决方案 »

  1.   

    向下面这样就可以了,记得在部件中把MSFFlexGrid的勾去掉。如果不知道Lisense,可以在debug窗口输入:?licenses.Add("MSFlexGridLib.MSFlexGrid"),就可以得到Lisense了。
    Option Explicit
    Private WithEvents mObject As VBControlExtender
    Private Sub Form_Load()
    Licenses.Add "MSFlexGridLib.MSFlexGrid", _
                "72E67120-5959-11cf-91F6-C2863C385E30"
    Set mObject = Me.Controls.Add("MSFlexGridLib.MSFlexGrid", "msfGrid")
    With mObject
        .Left = 0
        .Top = 0
        .Width = Me.ScaleWidth
        .Height = Me.ScaleHeight
        .Visible = True
    End With
    End Sub
      

  2.   

    to:yunyu97() 
    控件可以加上了,不过使用时还有一些问题:
    1、你所说的Lisense是做什么的?我没有用
    Licenses.Add "MSFlexGridLib.MSFlexGrid", _
                "72E67120-5959-11cf-91F6-C2863C385E30" 就可以加上控件了
    2、在别的窗体中设置这个控件属性会产生错误?(在添加它的窗体中设置控件属性时,就好用)
       怎么办啊?
      

  3.   

    Private WithEvents NewFlexGrid As MSFlexGridLib.MSFlexGrid     Set NewFlexGrid = Controls.Add("MSFlexGridLib.MSFlexGrid", "NewFlexGrid1")
         NewText.Visible = True或者使用控见数组,先在窗体上放置一个MSFlexGrid控件,并设定index=0
    代码如下:
        Load MSFlexGrid1(1)
        MSFlexGrid1(1).Visible = True
      

  4.   

    如果你希望在别的窗口设置这个控件的属性,请这样定义:
    Public WithEvents mObject As VBControlExtender
    或者定义一个函数:
    Public Function GetControl() As Object
        set GetControl = mObject
    End Function
    然后直接访问mObject或者GetControl就可以了
      

  5.   

    lisenses的问题你可以参考Msdn,里面有很详细的解释。
      

  6.   

    to;yunyu97() 
    呵呵,控件加上了,外部调用设置属性也好用了,可是,控件的事件怎么触发啊?比如我要用msg_click() 事件?
    解决这个问题就结贴,非常感谢!
      

  7.   

    如果你动态添加的控件定义的时候是按照类似下面的形势定义的
    Public WithEvents mObject As VBControlExtender
    那么你选择左边的对象下拉栏,选定mObject,然后在右边的事件栏中选择ObjectEvent,这样编译器会产生下面的函数,然后你可以在里面添加代码:
    Private Sub mObject_ObjectEvent(Info As EventInfo)
        Select Case Info.Name
            Case "Click"   '在Case后面填入事件的名称
                '注意info.EventParameters是传入的参数集合
            Case "MouseMove"
        End Select
    End Sub
      

  8.   

    Option Explicit
    Dim WithEvents objExt As VBControlExtender ' 使用 WithEvents 声明 VBControlExtender 变量Private Sub LoadControl()
       'Licenses.Add "Project1.Control1", "ewrinvcmcoe"
       Licenses.Add "MSFlexGridLib.MSFlexGrid", _
                "72E67120-5959-11cf-91F6-C2863C385E30"
       Set objExt = Controls.Add("MSFlexGridLib.MSFlexGrid", "myCtl")
       With objExt
        .Left = 0
        .Top = 0
        .Width = Me.ScaleWidth
        .Height = Me.ScaleHeight
        .Visible = True   ' 该控件在缺省情况下为不可见的。
        .ToolTipText = "这是一个MSFlexGrid控件!"
    End With
    End SubPrivate Sub Form_Load()
    LoadControl
    End SubPrivate Sub objExt_ObjectEvent(Info As EventInfo)
       ' 使用 Select Case 语句编写控件的事件处理程序。
       Select Case Info.Name
       Case "Click"
          ' 在此处处理 Click 事件。
           MsgBox "click 事件"
       ' 在这里处理其他情况
       Case Else ' 未知事件
          ' 在此处理各种未知的事件。
          ' MsgBox "else 事件"
       End Select
    End Sub