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...