VB6有一个新功能,可以动态添加控件,不用控件数组:

  object.Add (ProgID, name, container)

  参数说明

  Object 必需的。一个对象表达式,其值是“应用于”列表中的一个对象。

  ProgID 必需的。一个标识控件的字符串。大多数控件的 ProgID 都可通过查看对象浏览器来决定。控件的 ProgID 是由控件的库和类组成的。

  例如,CommandButton 控件的 ProgID 是 VB.CommandButton。在ProgID 与对象浏览器中所显示的不一样的情况下,Visual Basic

  将显示一个包括正确 ProgId 的错误信息。

  name 必要的。一个字符串,用来标识集合的成员。

  container 可选的。一个对象引用,它指定控件的容器。如果没有指定或为NULL,缺省值为 Controls 集合所属的容器。通过指定该参数,可以把一个控件放置在任何现存的容器控件(如 Frame 控件)中。用户控件或 ActiveX 文档也可以作为一个容器。

  举例:

//在picture1上面添加一个commandbutton 
  Private Sub Form_Load() 

Form1.Controls.Add "VB.CommandButton", "cmdOk", Picture1 

With Form1!cmdOk 

.Visible = True 

.Width = 500 

.Caption = "确认(&Y)" 

End With 

End Sub

  重点:当您添加一个未引用的需要许可证的控件到一个现存的(已部署好的)应用程序时,在使用 Add 方法之前您必须也添加这个控件的许可证关键字。

  在运行时添加未引用的控件:

  您也可以利 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事件来编程该控件的事件。