寫Form設計器嘗試 五 讓設計器使用自定義控制項

2021-04-16 18:44:58 字數 1191 閱讀 5215

在「寫form

設計器嘗試(三

) leejee

提出了自定義控制項的問題。我於是作了乙個小測試,來實現設計器中使用自定義控制項。

先要準備乙個自定義控制項。新建乙個

windows

控制項方案,命名為

mycontrol,

新增乙個名為

comboboxfield

的使用者控制項,在該使用者控制項上放乙個

label

和乙個combobox, 

生成解決方案。將生成的

dll檔案複製到測試目錄

d:/dotnet。

開啟設計器方案,在工程中新增對

mycontrol.dll

的引用,在主窗體的**中新增

using mycontrol;

然後在有形如

toolboxservice.toolbox.items.add(…

toolboxservice.toolbox.items.add(

newtoolboxitem(

typeof

(mycontrol.comboboxfield)));

assembly a1

=assembly.loadfrom(

@"d:/dotnet/mycontrol.dll");

toolboxservice.toolbox.items.add(

newtoolboxitem(a1.gettype(

"mycontrol.comboboxfield

")));

執行方案,效果和前面的一樣。好像這裡也將動態庫檔名以及型別名稱硬編碼到了**中,但是可以很簡單地做到讓這兩個字串從配置檔案中讀出,這樣就可以實現在設計器使用時隨意使用自定義控制項了。

執行方案,確實可以象使用其它標準控制項一樣使用這個自定義控制項。嘿嘿,沒有一點意外,還是和以前的試驗一樣簡單。

但是仔細想一想,出問題了,我們需要在工程中新增對控制項所在檔案的引用,需要在**中寫控制項的類名。也就是說我們在寫設計器時,就要知道我們要使用哪些自定義控制項。而我們在

vs中新增自定義控制項時,vs事先並不知道我們要加的是什麼。要實現這個功能怎麼辦?理所當然地要用「反射」。

在工程中刪除我們剛才新增的引用,並在主窗體**中刪除我們剛寫的那兩條語句。

在前面寫第二條語句的地方寫上:

寫Form設計器嘗試 一

eddie sheffield 作為微軟之外的第乙個發現啟用 form designer 的人,確實是了不起 幾年過後的今天,已經可以 找到一些關於form designer的資料,雖然不多也不全面,但畢竟還是有一些。我手上的資料是 1 中文版,第 16章專門講 form 設計器 2 windows...

寫Form設計器嘗試 一

新建乙個c windowform方案,在工程的引用中增加system.design,在form1的 中先新增 using system.componentmodel.design 然後雙擊form,在form的load事件中寫下以下 designsu ce su ce new designsu ce...

寫Form設計器嘗試 三 在窗體上新增控制項

新建乙個繼承自toolboxservice的類,名為demotoolboxservice,加上必要的using語句,在所繼承的類名上按滑鼠右鍵,點實現抽象類,已經幫我們自動完成了demotoolboxservice的框架,由於我們需要在設計器窗體上顯示乙個工具箱,就像vs左側的那個工具面板,不過我們...