English Sentence Loading...
英语句子加载中...

在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中动态的加入一个树形控件,如果你想树形控件建立到不同的
         注释:容器中,象一个控件或者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,winXP下运行通过。
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: VB 动态 添加 响应消息 控件
相关日志:
评论: 0 | 引用: 0 | 查看次数: 1843