运行时添加界面控件的问题 目前需要在窗口界面实现字符滚动显示,字符从数据库获得,可能显示不同颜色,本以为通过运行时动态添加如Label之类的控件会比较简单,但好像此法行不通?目前还没找到方法“在窗口上动态添加控件”,或者有其他更好解决方案? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.chenoe.com/blog/article.asp?id=1857vb6有一个新功能,可以动态添加控件,不用控件数组: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", picture1with form1!cmdok.visible = true.width = 500.caption = "确认(&y)"end withend sub==========================重点:当您添加一个未引用的需要许可证的控件到一个现存的(已部署好的)应用程序时,在使用 add 方法之前您必须也添加这个控件的许可证关键字。在运行时添加未引用的控件您也可以利用 add 方法来动态添加一个在工程中没有被引用的控件。(“未引用的”控件是不出现在 toolbox 中的控件)。为此,您必须也把控件的license 关键字添加到 licenses 集合中。下面的示例中在添加控件本身之前添加了控件的许可证关键字:option explicitprivate withevents extctl as vbcontrolextenderprivate 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 explicitdim 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.namecase "click"’这里处理 click 事件。’现在显示其他的 casecase else ’未知事件’这里处理未知事件。end selectend subnote: 不能把一个固有的控件指定给这个 vbcontrolextender 变量; 任何这种试图将引起类型不匹配错误。但是,您也可以通过使用 withevents 关键字声明一个对象变量,并且设置该方法返回的引用为该变量,从而编程一个动态添加控件的事件,如下所示。option explicit’声明对象变量为 commandbutton 。private withevents cmdobject as commandbutton private sub form_load()set cmdobject = form1.controls.add("vb.commandbutton", "cmdone")cmdobject.visible = truecmdobject.caption = "dynamic commandbutton"end subprivate sub cmdobject_click()print "this is a dynamically added control"end sub如果希望添加一个用户控件或任何 activex 控件到您的窗体,必须或者把这个控件添加到“工具箱”,或者把控件的 license 关键字添加到 licenses集合中。有关详细信息请参阅“增加方法 (licenses 集合)”。注意:如果您添加一个 activex 或用户控件到您的工程,但是没有在窗体中使用它,您也必须不要选定“工程属性”对话框的“生成” 选项卡上的“删除有关未使用的 activex 控件”选项。如果您的应用程序试图添加该控件,那么该 add 方法将失败,因为必需的信息已经被丢弃。删除控件=============要删除动态添加的控件,用“移除”方法。请注意,您只能删除那些用“添加”方法添加的控件(与用“load”语句添加的控件进行对比)下面的示例删除一个动态添加的控件:form1.controls.remove "ctl1" ’ 该控件的名称为 ctl1。 vb的Doevents问题,请帮忙回答一下 vb6.0,在某个图片中截个不规则形状出来,然后让这个形状作为一个可操作对象行么 同样目录,同样的VB 工程,在不同的机子引用同样的dll,居然会出错!!!Why ? 100求助救助!谢谢! 打包时,有文件夹怎么办? 在VB编程中,若一行代码太长需要换行时,行尾要加什么符号? recordset在内存中如何保存? 在程序中如何将一个excel文件(包含有多张工作表)转换成txt文件。每个工作表转换成一个txt文件。 哪里有window API的帮助下载? 如何在窗体上加上超级链接 读dbf文件需要调用那些文件? 如何播放 资源中的音频文件
====================================
参数说明:
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 vbcontrolextenderprivate 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 subnote: 不能把一个固有的控件指定给这个 vbcontrolextender 变量; 任何这种试图将引起类型不匹配错误。但是,您也可以通过使用 withevents 关键字声明一个对象变量,并且设置该方法返回的引用为该变量,从而编程一个动态添加控件的事件,如下所示。option explicit
’声明对象变量为 commandbutton 。
private withevents cmdobject as commandbutton private sub form_load()
set cmdobject = form1.controls.add("vb.commandbutton", "cmdone")
cmdobject.visible = true
cmdobject.caption = "dynamic commandbutton"
end subprivate sub cmdobject_click()
print "this is a dynamically added control"
end sub
如果希望添加一个用户控件或任何 activex 控件到您的窗体,必须或者把这个控件添加到“工具箱”,或者把控件的 license 关键字添加到 licenses集合中。有关详细信息请参阅“增加方法 (licenses 集合)”。注意:如果您添加一个 activex 或用户控件到您的工程,但是没有在窗体中使用它,您也必须不要选定“工程属性”对话框的“生成” 选项卡上的“删除有关未使用的 activex 控件”选项。如果您的应用程序试图添加该控件,那么该 add 方法将失败,因为必需的信息已经被丢弃。删除控件
=============
要删除动态添加的控件,用“移除”方法。请注意,您只能删除那些用“添加”方法添加的控件(与用“load”语句添加的控件进行对比)下面的示例删除一个动态添加的控件:form1.controls.remove "ctl1" ’ 该控件的名称为 ctl1。