永发信息网

如何动态增加控件

答案:1  悬赏:30  手机版
解决时间 2021-04-04 08:40
如何动态增加控件
最佳答案
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事件来编程该控件的事件。下面是一个简单的例子:
  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

  注意:不能把一个固有的控件指定给这个 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 sub

  private 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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
战神Z8和神舟战神Z8有什么区别
谁知道用积分换话费用什么数字给10086发短信
单选题He has made another
LOL2018年最新版本怎么看自己配置的装备
QQ西游装备绑定了能解绑吗?
在沈阳学吉他,哪里教的好?想要长期学习。最
81mm×68mm×98mm有多大
反应停(沙利度胺)化学结构分析
想摆脱现状的句子,为摆脱烦恼的唯美句子
If you want to get to the top in life,you
梦见发大水了,带孩子趟水回家什么征兆
现在日剧四大女王是谁
能否用型砂代替芯砂造芯?
家庭电路触电事故有单线触电和双线触电两种,
鞍山到石家庄多少公里,中国石家庄到韩国座飞
推荐资讯
古典诗词唯美知己,唯美的古典点的爱情句子
老婆说要禁欲三个月我怎么办?
我不理她两天了,该怎么去找她讲话呢
谁知道从深圳宝安区观澜 怎么到肇庆市。坐车
请问,奶奶是否属于我国丧假的直系亲属范围
大娘的娘还可以组什么词二年级上册
评价一个人的优点语句,说明一个女人很美的一
铝及铝合金的焊接方法
1-14等于多少
如图中的牛没“吹牛”,它的乳汁中含有人乳铁
绥宁县哪里可以学叉车,浏阳有考铲车操作证的
我家有一处房子租出去了 还有4个月房租到期
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?