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