VB6 動態建立使用者控制項

2021-05-24 13:25:37 字數 3188 閱讀 3423

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。

VB動態建立控制項

dim withevents mybtn as commandbutton set mybtn controls.add vb.commandbutton button1 with mybtn caption 我可以響應事件!width 1800 left 100 top 700 visible t...

VB6技巧 總結

vb設定多行textbox的位置 由於自動輸入的文字比較多,最後輸入的跑到下面了,想要自動滾動到下面,本來以為 操作滾動條呢,但是沒有方法。於是我巧妙的採用了 顯示列表是設定了乙個多行 的 textbox 顯示列表.selstart len 顯示列表.text 1 顯示列表.sellength 1 ...

vb6 讀寫檔案

write file dim nhandle as integer,fname as string fname d 1.txt nhandle freefile open fname for output as nhandle print nhandle,0 print nhandle,2 clos...