vb实现动态添加控件2010-03-12VB6有一个新功能,可以动态添加控件,不用控件数组:object.Add (ProgID, name, container)参数说明Object 必需的。一个对象表达式,其值是“应用于”列表中的一个对象。ProgID 必需的。一个标识控件的字符串。大多数控件的ProgID 都可通过查看对象浏览器来决定。控件的ProgID是由控件的库和类组成的。例如,CommandButton控件的ProgID是 VB.CommandButton。在ProgID 与对象浏览器中所显示的不一样的情况下,Visual Basic将显示一个包括正确 ProgId 的错误信息。name 必要的。一个字符串,用来标识集合的成员。container 可选的。一个对象引用,它指定控件的容器。如果没有指定或为NULL,缺省值为 Controls 集合所属的容器。通过指定该参数,可以把一个控件放置在任何现存的容器控件(如 Frame控件)中。用户控件或 ActiveX 文档也可以作为一个容器。举例: //在picture1上面添加一个commandbuttonPrivate 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事件来编程该控件的事件。下面是一个简单的例子。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 Sub Private Sub extObj_ObjectEvent(Info As EventInfo) 使用Select Case 编程控件的事件。 Select Case Info.Name Case "Click" 这里处理 Click 事件。 现在显示其他的case Case Else 未知事件 这里处理未知事件。 End Select End Sub