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

動態(tài)添加控件—使用VB6的新技巧

[摘要]VB6有一個新功能,可以動態(tài)添加控件,不用控件數(shù)組:object.Add (ProgID, name, container)參數(shù)說明 Object 必需的。一個對象表達式,其值是“應(yīng)用于”列表中的一個對象。 ProgID 必需的。一個標識控件的字符串。大多數(shù)控件的 ProgID 都可通過查看對...
VB6有一個新功能,可以動態(tài)添加控件,不用控件數(shù)組:

object.Add (ProgID, name, container)
參數(shù)說明  


Object 必需的。一個對象表達式,其值是“應(yīng)用于”列表中的一個對象。
ProgID 必需的。一個標識控件的字符串。大多數(shù)控件的 ProgID 都可通過查看對象瀏覽器來決定?丶 ProgID 是由控件的庫和類組成的。
例如,CommandButton 控件的 ProgID 是 VB.CommandButton。在ProgID 與對象瀏覽器中所顯示的不一樣的情況下,Visual Basic
將顯示一個包括正確 ProgId 的錯誤信息。
name 必要的。一個字符串,用來標識集合的成員。
container 可選的。一個對象引用,它指定控件的容器。如果沒有指定或為NULL,缺省值為 Controls 集合所屬的容器。通過指定該參數(shù),可以把一個控件放置在任何現(xiàn)存的容器控件(如 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




  重點:當您添加一個未引用的需要許可證的控件到一個現(xiàn)存的(已部署好的)應(yīng)用程序時,在使用 Add 方法之前您必須也添加這個控件的許可證關(guān)鍵字。

在運行時添加未引用的控件:
  您也可以利 Add 方法來動態(tài)添加一個在工程中沒有被引用的控件。(“未引用的”控件是不出現(xiàn)在 Toolbox 中的控件)。為此,您必須也把控件的License 關(guān)鍵字添加到 Licenses 集合中。下面的示例中在添加控件本身之前添加了控件的許可證關(guān)鍵字:

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 關(guān)鍵字聲明一個對象變量為VBControlExtender 對象(如上),并且設(shè)置該對象變量到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 事件。
現(xiàn)在顯示其他的 case
Case Else 未知事件
這里處理未知事件。
End Select
End Sub

Note: 不能把一個固有的控件指定給這個 VBControlExtender 變量; 任何這種試圖將引起類型不匹配錯誤。

  但是,您也可以通過使用 WithEvents 關(guān)鍵字聲明一個對象變量,并且設(shè)置該方法返回的引用為該變量,從而編程一個動態(tài)添加控件的事件,如下所示。

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 關(guān)鍵字添加到 Licenses集合中。有關(guān)詳細信息請參閱“增加方法 (Licenses 集合)”。

  注意:如果您添加一個 ActiveX 或用戶控件到您的工程,但是沒有在窗體中使用它,您也必須不要選定“工程屬性”對話框的“生成” 選項卡上的“刪除有關(guān)未使用的 ActiveX 控件”選項。如果您的應(yīng)用程序試圖添加該控件,那么該 Add 方法將失敗,因為必需的信息已經(jīng)被丟棄。

刪除控件

  要刪除動態(tài)添加的控件,用“移除”方法。請注意,您只能刪除那些用“添加”方法添加的控件(與用“Load”語句添加的控件進行對比)下面的示例刪除一個動態(tài)添加的控件:

Form1.Controls.Remove "ctl1" 該控件的名稱為 ctl1。