明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

在VB中動(dòng)態(tài)添加可響應(yīng)消息的控件

[摘要]在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ò)。