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