在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中文版下运行通过。
|