Winform自帶的控件往往不能滿足我們的需要,或者在某些方面不夠方便,可以通過自定義控件可以解決上述的問題,但自定義控件的正確的調用方法卻鮮為人知。
新建一個項目,暫且命名為UI,默認會創建一個名為Form1的窗體。



新建一個自定義控件,名為MyControl。



對MyControl代碼進行修改,將其背景顏色設置為藍色。

此時打開Form1窗體,會在工具箱里面找到自定義的MyControl控件,若找不到則需要生成一下項目。

將其拖至Form1窗體上,與上方設置的背景顏色完全一致。

但這并不是正確調用方法,若是經常接觸自定義控件,當打開包含有自定義控件的窗體時,會出現類似于以下兩張圖的情況,出現這兩種情況的原因是:生成項目時,你無法確定自定義控件生成的順序先于窗體,若先生成窗體,再生成自定義控件,生成窗體時,窗體中所引用的自定義控件還未生成,因此造成錯誤。


為了確保自定義控件生成順序先于調用自定義控件的窗體,可將自定義控件與窗體分隔為兩個工程,其中自定義控件所在的工程不再是生成一個應用程序,而是生成類庫供其它工程調用,因此需要將工程的輸出類型設置為類庫。此時Form1和PRogram都是多余的文件,可以刪除。


對UI工程進行生成,會在工程目錄下bin文件夾中生成一個dll文件,該文件是一個引用文件,當其它工程引用這個文件,就可以調用UI工程中的自定義控件。


此時可以關閉UI工程,并新建一個目標框架與UI工程一致的項目,暫且命名為Test。


將UI工程加入Test解決方案。


雖然兩個工程再同一解決方案中,但二者之間沒有任何關系,若要將其關聯起來,需要在Test工程中,引用UI工程所生成的dll文件。



再對Test解決方案設置項目依賴項,設置哪個項目依賴于哪個項目才能運行;設置項目生成順序,設置項目生成的前后順序;設置啟動項目,設置哪個項目作為啟動項目。



此時打開Test工程中的Form1窗體,在工具箱中會發現UI工程中的MyControl控件,如果沒有則需要生成一下項目,見到下圖,意味著Winform調用自定義控件的環境已然搭配完成,此后需要自定義控件,均與UI工程中添加,Test工程中調用。

PS:建議將UI工程置于Test工程文件夾中,作為一個整體,方便搬運。
新聞熱點
疑難解答