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

2016-02-19 15:44 22 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的在VB中动态添加可响应消息的控件教程,一起来看看吧!超容易上手~

【 tulaoshi.com - 编程语言 】

  在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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

来源:http://www.tulaoshi.com/n/20160219/1610287.html

延伸阅读
熟悉VB的朋友对使用ActiveX控件一定不会陌生,众多控件极大地方便了编程,但唯一的缺陷是不能动态加载控件,必须在设计时通过引用,将控件放置在窗体上。VB6.0已能够解决该问题,只是帮助中没有明确说明,并且没有描述到一些关键功能,由于以前的版本中可以动态创建进程外服务:如果对象是外部可创建的,可在 Set 语句中用 New 关键字、Cre...
----在我编制的一个控制系统中,需要对不同模块的不同状态设置相应参数.由于设置的参数名称都一样,只是具体内容不同,我不再象往常一样创建不同的窗口,摆放相同的部件,编制几乎相同的代码,而使用了窗体实例.其实现过程大致如下: 新建一个Form(我使用的是MDIForm,用一般的form也一样,我试过),取名为form1,再建一个窗口取名为form2; ...
这个问题在很多论坛里边都有问到。但是一直没找到满意的答案。下边写出一个解决办法 Dim sql As String Dim rstLiuShui As New ADODB.Recordset Dim Rpt As New CRAXDDRT.Report Dim PrintApp As New CRAXDDRT.Application If Option2.Value = True Then sql = "select * from n_ihbill where datediff(d,日期,'" & Format(DTPicker1.V...
树控件的双击响应 吉林大学 李健 下载本文示例代码 ClassWizard为CTreeCtrl(树控件)添加的NM_DBLCLK(双击)消息的响应函数中带有一个NMHDR * 型指针形参: OnDblClkTree(NMHDR* pNMHDR, LRESULT* pResult) 这个陌生的指针类型常使初用树控件的编程者陷入迷茫之中。实际上我们完全...
标签: vb
· "公共队列"在整个可传递消息的"消息队列"网络中复制并传输,并且有可能由网络连接的所有站点访问。 · "专用队列"不在整个网络中发布。相反,它们仅在所驻留的本地计算机上可用。专用队列只能由知道队列的完整路径名或标签的应用程序访问。 · "管理队列"包含确认在给定"消息队列"网络中发送的消息回执的消息。指定希望 Me...

经验教程

543

收藏

52
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部