我做了几个控件 ,但不想同时在窗口中显示出来 ,窗口中有一个PICBOX,我想在运行时 ,通过命令将控件复制到这个PICBOX中。

解决方案 »

  1.   

    运行时控件的.Visible=False 
    复制时:   obj.Container= PICBOX
               obj.Visible=true
      

  2.   

    好像也只有设置container,除了这样好像也真没有别的办法。
      

  3.   

    看看我写的这个例子。有***的地方是省略的代码,自己可以加。这是动态加载TIMER的例子。
    Private WithEvents timer1 As Timer
    Private Sub Form_Load()
      Set Timer1 = Controls.Add("VB.Timer", "Timer1")
           With Timer1
             .Interval =500
             .Enabled = ***
             ***
           End With
    End SubPrivate Sub Timer1_Timer()
        *** ***   
    End Sub用户控件:
    在运行时添加未引用的控件,可以利用 Add 方法来动态添加一个在工程中没有被引用的控件。(“未引用的”控件是不出现在 Toolbox 中的控件,包括你说的用户控件)。为此,您必须也把控件的 License 关键字添加到 Licenses 集合中。下面的示例中在添加控件本身之前添加了控件的许可证关键字:Option Explicit
    Private WithEvents extCtl As VBControlExtender
    Private Sub Form_Load()
       Licenses.Add "prjWeeks.WeeksCtl", "xydsfasfjewfe"
       Set extCtl = Form1.Controls.Add("prjWeeks.WeeksCtl", "ctl1")
       extCtl.Visible = True ' The control is invisible by default.
    End Sub但是,为了编程这样一个未引用控件的事件,必须使用 WithEvents 关键字声明一个对象变量为VBControlExtender 对象(如上),并且设置该对象变量到 Add 方法返回的引用上。然后,利用VBControlExtender 对象的 ObjectEvent 事件来编程该控件的事件。下面是一个简单的例子。Option Explicit
    Dim WithEvents objExt As VBControlExtender '声明 Extender 变量Private Sub LoadControl()
       Licenses.Add "Project1.Control1", "xydsfasfjewfe"
       Set objExt = Controls.Add("Project1.Control1", "myCtl")
       objExt.Visible = True 
    End SubPrivate Sub extObj_ObjectEvent(Info As EventInfo)
       '使用 Select Case 编程控件的事件。
       Select Case Info.Name
       Case "Click"
          '这里处理 Click 事件。
       '现在显示其他的 case
       Case Else '未知事件
          '这里处理未知事件。
       End Select
    End Sub
      

  4.   

    你是不是上面这种意思啊。
    “我做了几个控件 ,但不想同时在窗口中显示出来 ,窗口中有一个PICBOX,我想在运行时 ,通过命令将控件复制到这个PICBOX中”
    但是动态创建不是“复制”!
      

  5.   

    楼主说有必要啊。没看到吗?呵呵
    为什么动态创建就无聊呢 ,我不想把所有代码都放在一个窗口上,我怕窗口文件坏了,以后很麻烦,我想把窗口做成一个框架,需要什么再加进来,
    不过为什么窗口文件毁坏了而其他文件的好的,并且代码还可以执行,exe外还有什么?用户控件?exe坏了还能执行吗?重装呗