关于动态生成控件的问题

翻译|其它|编辑:郝浩|2007-03-30 15:44:43.000|阅读 1869 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

在VB中动态添加可响应消息的控件    

       在VB编程中,经常要根据不同的情况在运行时向窗口中添加或者删除控件,而各个控件还要响应各种事件。在一般的情况下是首先在设计时将控件加入到窗口中,在它们的各个事件中写入代码,然后将它们的Visible属性设置为False。在运行时再使控件显示出来,但是这样既不方便同时也因为在设计时在窗口中加入太多的控件而使得程序的运行速度变慢。下面我向大家介绍一种通过编程在运行时动态添加和删除控件的方法 

       首先建立一个工程文件,然后在Form1中加入以下的代码: 
       Dim  WithEvents  cmdMyCommand  As  VB.CommandButton 
       Option  Explicit 
       '在下面的定义中,程序定义了一个TextBox控件、一个CommandButton控件 
       '和一个附加控件。 

       Dim  WithEvents  ctlDynamic  As  VBControlExtender 
       Dim  WithEvents  ctlText  As  VB.TextBox 
       Dim  WithEvents  ctlCommand  As  VB.CommandButton 
       Dim  WithEvents  ctlCommandDel  As  VB.CommandButton 
       Private  Sub  ctlCommandDel_Click() 
               Dim  i  As  Integer 
                
               '将控件的许可证信息删除 

               Licenses.Remove  "MSComctlLib.TreeCtrl" 
               If  MsgBox("是否删除所有控件",  vbYesNo)  =  vbYes  Then 
               For  i  =  1  To  Form1.Controls.Count 
                       Controls.Remove  0 
               Next  i 
               End  If 
       End  Sub 
       Private  Sub  ctlCommand_Click() 
               ctlText.Text  =  "你点击的是控制按钮" 
       End  Sub 
 
       Private  Sub  ctlDynamic_ObjectEvent(Info  As  EventInfo) 
               '当点击树形控件的某一个条目后,在ctlText中显示条目。 
               If  Info.Name  =  "Click"  Then 
                       ctlText.Text  =  "你点击的条目是  "  &  _ 
                                       ctlDynamic.object.selecteditem.Text 
               End  If 
       End  Sub 
 
       Private  Sub  Form_Load() 
               Dim  i  As  Integer 
               '  将树形控件的许可证信息加入到许可证集合中 
               '  如果许可证已经存在,则会返回错误信息732 

               Licenses.Add  "MSComctlLib.TreeCtrl" 
 
               '  在Form中动态的加入一个树形控件,如果你想树形控件建立到不同的 
               '容器中,象一个Frame控件或者PictureBox控件,你只要将Controls.Add 
               '函数的第三个参数改为特定的容器名就可以了 

               Set  ctlDynamic  =  Controls.Add("MSComctlLib.TreeCtrl",  _ 
                                               "myctl",  Form1) 
               '设置树形控件的位置和尺寸 
               ctlDynamic.Move  1,  1,  2500,  3500 
               '在树形控件中加入10个节点 
               For  i  =  1  To  10 
                       ctlDynamic.object.nodes.Add  Key:="Test"  &  Str(i),  _ 
                                       Text:="Test"  &  Str(i) 
                       ctlDynamic.object.nodes.Add  Relative:="Test"  &  Str(i),  _ 
                                       Relationship:=4,  Text:="TestChild"  &  Str(i) 
               Next  i 
               '使树形控件可见 
               ctlDynamic.Visible  =  True 
 
               '加入一个TextBox 
               Set  ctlText  =  Controls.Add("VB.TextBox",  "ctlText1",  Form1) 
               '设置TextBox的位置和尺寸 
               ctlText.Move  (ctlDynamic.Left  +  ctlDynamic.Width  +  50),  _ 
                                               1,  2500,  100 
               '将textBox的背景色设置为蓝色并将前景色设置为白色 
               ctlText.BackColor  =  vbBlue 
               ctlText.ForeColor  =  vbWhite 
               '使TextBox可见 
               ctlText.Visible  =  True 
 
               '加入一个CommandButton 
               Set  ctlCommand  =  Controls.Add("VB.CommandButton",  _ 
                                               "ctlCommand1",  Form1) 
               '设置CommandButton的位置和尺寸 
               ctlCommand.Move  (ctlDynamic.Left  +  ctlDynamic.Width  +  50),  _ 
                                               ctlText.Height  +  50,  1500,  500 
               '设置CommandButton的标题 
               ctlCommand.Caption  =  "点击" 
               '使CommandButton可见 
               ctlCommand.Visible  =  True 
                
               '建立一个删除按钮 
               Set  ctlCommandDel  =  Controls.Add("VB.CommandButton",  _ 
                                               "ctlCommand2",  Form1) 
               ctlCommandDel.Move  (ctlDynamic.Left  +  ctlDynamic.Width  +  50),  _ 
                                               ctlText.Height  +  650,  1500,  500 
               ctlCommandDel.Caption  =  "删除所有控件" 
               ctlCommandDel.Visible  =  True 
       End  Sub 

       运行上面的程序,可以看到程序在窗口中加入了三个VB标准控件:一个TextBox和两个CommandButton还加入了一个扩展的ActiveX控件:树形控件。这些控件还可以响应消息,点击树形控件中的项目或者“点击”按钮就可以在文本框中显示相应的内容。点击“删除所有控件”按钮就可以删除加入的所有控件了。 


       通过上面的程序可以看到,通过WithEvents可以定义带事件相应的控件,对于标准的VB控件(例如CommandButton、TextBox等)可以通过VB.XXX来定义,其中XXX是控件的类的名称,而对于扩展的ActiveX控件,可以通过VBControlExtender来定义,在装载扩展控件以前,首先要使用Licenses对象加入控件的许可证信息。

 
       上面的程序在VB6,WIN98中文版下运行通过。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP