在VB中動(dòng)態(tài)添加可響應(yīng)消息的控件
發(fā)表時(shí)間:2024-02-19 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在VB編程中,經(jīng)常要根據(jù)不同的情況在運(yùn)行時(shí)向窗口中添加或者刪除控件,而各個(gè)控件還要響應(yīng)各種事件。在一般的情況下是首先在設(shè)計(jì)時(shí)將控件加入到窗口中,在它們的各個(gè)事件中寫入代碼,然后將它們的Visible屬性設(shè)置為False。在運(yùn)行時(shí)再使控件顯示出來(lái),但是這樣既不方便同時(shí)也因?yàn)樵谠O(shè)計(jì)時(shí)在窗口中加入太多的...
在VB編程中,經(jīng)常要根據(jù)不同的情況在運(yùn)行時(shí)向窗口中添加或者刪除控件,而各個(gè)控件還要
響應(yīng)各種事件。在一般的情況下是首先在設(shè)計(jì)時(shí)將控件加入到窗口中,在它們的各個(gè)事件中寫入
代碼,然后將它們的Visible屬性設(shè)置為False。在運(yùn)行時(shí)再使控件顯示出來(lái),但是這樣既不方便
同時(shí)也因?yàn)樵谠O(shè)計(jì)時(shí)在窗口中加入太多的控件而使得程序的運(yùn)行速度變慢。下面我向大家介紹一
種通過(guò)編程在運(yùn)行時(shí)動(dòng)態(tài)添加和刪除控件的方法
首先建立一個(gè)工程文件,然后在Form1中加入以下的代碼:
Dim WithEvents cmdMyCommand As VB.CommandButton
Option Explicit
注釋:在下面的定義中,程序定義了一個(gè)TextBox控件、一個(gè)CommandButton控件
注釋:和一個(gè)附加控件。
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 = "你點(diǎn)擊的是控制按鈕"
End Sub
Private Sub ctlDynamic_ObjectEvent(Info As EventInfo)
注釋:當(dāng)點(diǎn)擊樹形控件的某一個(gè)條目后,在ctlText中顯示條目。
If Info.Name = "Click" Then
ctlText.Text = "你點(diǎn)擊的條目是 " & _
ctlDynamic.object.selecteditem.Text
End If
End Sub
Private Sub Form_Load()
Dim i As Integer
注釋: 將樹形控件的許可證信息加入到許可證集合中
注釋: 如果許可證已經(jīng)存在,則會(huì)返回錯(cuò)誤信息732
Licenses.Add "MSComctlLib.TreeCtrl"
注釋: 在Form中動(dòng)態(tài)的加入一個(gè)樹形控件,如果你想樹形控件建立到不同的
注釋:容器中,象一個(gè)Frame控件或者PictureBox控件,你只要將Controls.Add
注釋:函數(shù)的第三個(gè)參數(shù)改為特定的容器名就可以了
Set ctlDynamic = Controls.Add("MSComctlLib.TreeCtrl", _
"myctl", Form1)
注釋:設(shè)置樹形控件的位置和尺寸
ctlDynamic.Move 1, 1, 2500, 3500
注釋:在樹形控件中加入10個(gè)節(jié)點(diǎn)
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
注釋:加入一個(gè)TextBox
Set ctlText = Controls.Add("VB.TextBox", "ctlText1", Form1)
注釋:設(shè)置TextBox的位置和尺寸
ctlText.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
1, 2500, 100
注釋:將textBox的背景色設(shè)置為藍(lán)色并將前景色設(shè)置為白色
ctlText.BackColor = vbBlue
ctlText.ForeColor = vbWhite
注釋:使TextBox可見
ctlText.Visible = True
注釋:加入一個(gè)CommandButton
Set ctlCommand = Controls.Add("VB.CommandButton", _
"ctlCommand1", Form1)
注釋:設(shè)置CommandButton的位置和尺寸
ctlCommand.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
ctlText.Height + 50, 1500, 500
注釋:設(shè)置CommandButton的標(biāo)題
ctlCommand.Caption = "點(diǎn)擊"
注釋:使CommandButton可見
ctlCommand.Visible = True
注釋:建立一個(gè)刪除按鈕
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
運(yùn)行上面的程序,可以看到程序在窗口中加入了三個(gè)VB標(biāo)準(zhǔn)控件:一個(gè)TextBox和兩個(gè)
CommandButton還加入了一個(gè)擴(kuò)展的ActiveX控件:樹形控件。這些控件還可以響應(yīng)消息,
點(diǎn)擊樹形控件中的項(xiàng)目或者“點(diǎn)擊”按鈕就可以在文本框中顯示相應(yīng)的內(nèi)容。點(diǎn)擊“刪除
所有控件”按鈕就可以刪除加入的所有控件了。
通過(guò)上面的程序可以看到,通過(guò)WithEvents可以定義帶事件相應(yīng)的控件,對(duì)于標(biāo)準(zhǔn)的VB
控件(例如CommandButton、TextBox等)可以通過(guò)VB.XXX來(lái)定義,其中XXX是控件的類的名稱
,而對(duì)于擴(kuò)展的ActiveX控件,可以通過(guò)VBControlExtender來(lái)定義,在裝載擴(kuò)展控件以前,
首先要使用Licenses對(duì)象加入控件的許可證信息。
上面的程序在VB6,WIN98中文版下運(yùn)行通過(guò)。