VB6有一個新功能,可以動態添加控件,不用控件數組:
object.Add (ProgID, name, container)
參數說明
Object 必需的。一個對象表達式,其值是“應用於”列表中的一個對象。
ProgID 必需的。一個標識控件的字符串。大多數控件的ProgID 都可通過查看對象浏覽器來決定。控件的ProgID是由控件的庫和類組成的。
例如,CommandButton控件的ProgID是 VB.CommandButton。在ProgID 與對象浏覽器中所顯示的不一樣的情況下,Visual Basic
將顯示一個包括正確 ProgId 的錯誤信息。
name 必要的。一個字符串,用來標識集合的成員。
container 可選的。一個對象引用,它指定控件的容器。如果沒有指定或為NULL,缺省值為 Controls 集合所屬的容器。通過指定該參數,可以把一個控件放置在任何現存的容器控件(如 Frame控件)中。用戶控件或 ActiveX 文檔也可以作為一個容器。
舉例: //在picture1上面添加一個commandbutton
Private Sub Form_Load()
Form1.Controls.Add "VB.CommandButton", "cmdOk", Picture1
With Form1!cmdOk
.Visible = True
.Width = 500
.Caption = "確認(&Y)"
End With
End Sub
重點:當您添加一個未引用的需要許可證的控件到一個現存的(已部署好的)應用程序時,在使用Add 方法之前您必須也添加這個控件的許可證關鍵字。
在運行時添加未引用的控件:
您也可以利 Add 方法來動態添加一個在工程中沒有被引用的控件。(“未引用的”控件是不出現在 Toolbox 中的控件)。為此,您必須也把控件的License關鍵字添加到 Licenses 集合中。下面的示例中在添加控件本身之前添加了控件的許可證關鍵字:
Option Explicit
Private WithEvents extCtl As VBControlExtender
Private Sub Form_Load()
Licenses.Add "prjWeeks.WeeksCtl", "xydsfasfjewfe"
Set extCtl = Form1.Controls.Add("prjWeeks.WeeksCtl", "ctl1")
extCtl.Visible = True The control is invisible by default.
End Sub
但是,為了編程這樣一個未引用控件的事件,您必須使用WithEvents關鍵字聲明一個對象變量為VBControlExtender 對象(如上),並且設置該對象變量到Add 方法返回的引用上。然後,利用VBControlExtender 對象的ObjectEvent事件來編程該控件的事件。下面是一個簡單的例子。
Option Explicit
Dim WithEvents objExt As VBControlExtender 聲明 Extender 變量
Private Sub LoadControl()
Licenses.Add "Project1.Control1", "xydsfasfjewfe"
Set objExt = Controls.Add("Project1.Control1", "myCtl")
objExt.Visible = True
End Sub
Private Sub extObj_ObjectEvent(Info As EventInfo)
使用Select Case 編程控件的事件。
Select Case Info.Name
Case "Click"
這裡處理 Click 事件。
現在顯示其他的case
Case Else 未知事件
這裡處理未知事件。
End Select
End Sub
Note: 不能把一個固有的控件指定給這個 VBControlExtender 變量; 任何這種試圖將引起類型不匹配錯誤。
但是,您也可以通過使用WithEvents關鍵字聲明一個對象變量,並且設置該方法返回的引用為該變量,從而編程一個動態添加控件的事件,如下所示。
Option Explicit
聲明對象變量為 CommandButton 。
Private WithEvents cmdObject As CommandButton
Private Sub Form_Load()
Set cmdObject = Form1.Controls.Add("VB.CommandButton", "cmdOne")
cmdObject.Visible = True
cmdObject.Caption = "Dynamic CommandButton"
End Sub
Private Sub cmdObject_Click()
Print "This is a dynamically added control"
End Sub
如果希望添加一個用戶控件或任何 ActiveX控件到您的窗體,必須或者把這個控件添加到“工具箱”,或者把控件的License關鍵字添加到 Licenses集合中。有關詳細信息請參閱“增加方法 (Licenses 集合)”。
注意:如果您添加一個 ActiveX 或用戶控件到您的工程,但是沒有在窗體中使用它,您也必須不要選定“工程屬性”對話框的“生成” 選項卡上的“刪除有關未使用的ActiveX控件”選項。如果您的應用程序試圖添加該控件,那麼該 Add 方法將失敗,因為必需的信息已經被丟棄。
刪除控件
要刪除動態添加的控件,用“移除”方法。請注意,您只能刪除那些用“添加”方法添加的控件(與用“Load”語句添加的控件進行對比)下面的示例刪除一個動態添加的控件:
Form1.Controls.Remove "ctl1" 該控件的名稱為 ctl1。