標籤:
自訂控制項開發
一般而言,Visual Studio 2005中內建的幾十種控制項已經足夠我們使用了,但是,在一些特殊的需求中,可能需要一些特殊的控制項來與使用者進行互動,這時,就需要我們自己開發新的、滿足使用者需求的控制項。
要開發自己的控制項,有幾種方法:
?複合控制項(Composite Controls):將現有的各種控制群組合起來,形成一個新的控制項,來滿足使用者的需求。
?擴充控制項(Extended Controls):就是在現有的控制項基礎上,派生出一個新的控制項,增加新的功能,或者修改原有功能,來滿足使用者需求。
?自訂控制項(Custom Controls):就是直接從System.Windows.Forms.Control類派生,也就是說完全由自己來設計、實現一個全新的控制項,這是最靈活、最強大的方法,但是,對開發人員的要求也是最高的。要實現一個自訂控制項,必須為Control類的的OnPaint事件編寫代碼,在OnPaint事件中實現自訂控制項的繪製工作。同時,還可以重寫Control類的WndProc方法,來處理底層的Windows訊息。所以說,要實現一個自訂控制項,對開發人員的要求較高,要求開發人員必須瞭解GDI+和Windows API的知識。
下面我們就分別給大家介紹這三種方法。
?複合控制項(Composite Controls)
複合控制項實際上是控制項的集合,類似於堆積木。因此,可以按照使用者的需求,把VS 2005工具箱中的控制項任意組合起來,形成一個複合控制項。在以後使用中,將產生的這個複合控制項作為一個控制項來對待。
複合控制項一般都是從UserControl類派生而來,因此複合控制項(使用者控制項)可以在“UserControl測試容器”中進行測試。
複合控制項的建立步驟:
第一步:建立一個Windows控制項陳列庫項目“CompositeControlDemo”
第二步:向複合控制項中添加Visual Studio 2005中的控制群組合。
添加了一個Label控制項和Timer控制項。
Label控制項的Text屬性設定為””,Timer控制項的Interval屬性設定為1000毫秒,即1秒,同時,將Enabled屬性設定為True。
設定Timer控制項的Tick事件,並添加代碼
第三步:向複合控制項添加屬性 我們添加了一個前景色彩和背景色屬性。
第四步:產生複合控制項
直接按F5,或者點擊“產生”菜單,選擇其中的“產生解決方案”菜單向,就可以產生複合控制項。
我們可以看到,產生的複合控制項是以.dll檔案的形式存在的。
第五步:把複合控制項顯示在工具箱中,並設定相應表徵圖
1. 把複合控制項顯示在工具箱中
2.設定複合控制項在工具箱中的表徵圖
這裡,我們可以看到,複合控制項被加入到工具箱中了,但是使用一個預設的表徵圖顯示的(小齒輪),要在工具箱中顯示一個我們自訂的表徵圖有兩種方法,這裡我們先講第一種。
[ToolboxBitmap(typed(Button))]
第六步:測試複合控制項
其實,當我們直接按F5產生複合控制項時,會彈出一個“使用者控制項測試容器”,在這個容器中,顯示了我們的複合控制項MyDigitalClock的運行情況,同時在其右側,還有一個屬性視窗,通過改變屬性視窗中的屬性設定,就可以改變複合控制項的相應狀態。比如,我們修改一下ClockBackColor屬性和ClockForeColor屬性(即設定一下背景色和前景色彩),可以看到,MyDigitalClock控制項的樣子發生了變化。
上面是通過“使用者控制項測試容器”來對複合控制項進行測試,實際上,我們還可以通過建立一個新的Windows項目來對複合控制項進行測試。
1.建立一個測試專案“TestCompositeControls”。
2.將複合控制項“MyDigitalClock”添加到表單中
3.設定MyDigitalClock控制項的屬性
4.按F5運行,觀察表單中的MyDigitalClock控制項。
?擴充控制項(Extended Controls):就是在現有的控制項基礎上,派生出一個新的控制項,增加新的功能,或者修改原有功能,來滿足使用者需求。
擴充控制項保留了原來控制項的介面、屬性、方法,同時還可以擴充原有控制項功能,實現新的功能,滿足使用者需求。
擴充控制項可以在兩方面進行擴充:
1.擴充使用者介面,介面上有所變化,使介面更好看。
介面上要有所變化,就要重載OnPaint方法,對原有控制項的介面進行重新繪製。
2.擴充功能,功能上有所加強。
功能上有所加強就是指增加新的功能,滿足使用者需求。
建立擴充控制項的步驟:
第一步:建立一個類庫項目
第二步:添加引用和繼承
比如我們要擴充Button控制項,就要添加包含Button控制項的程式集System.Windows.Forms
同時,繼承自System.Windows.Forms.Button
第三步:重載OnPaint方法,擴充使用者介面,或者增添新的功能
第四步:產生擴充控制項
直接按F5,或者點擊“產生”菜單,選擇其中的“產生解決方案”菜單向,就可以產生複合控制項。
我們可以看到,產生的擴充控制項是以.dll檔案的形式存在的。
第五步:把擴充控制項顯示在工具箱中,並設定相應表徵圖
與複合控制項相同
第六步:測試擴充控制項
複合控制項一般都是從UserControl類派生而來,因此複合控制項(使用者控制項)可以在“UserControl測試容器”中進行測試。但是,如果對於擴充控制項,一般都不直接從UserControl類派生的,而是從需要擴充的那一類控制項本身,就像我們後面要講到的XButton擴充控制項一樣,它是從從Button類繼承的,是以添加一個類的方式加到項目裡,(複合控制項是以一個控制項陳列庫項目,待查證),這時測試就沒有辦法在“UserControl測試容器”中進行測試,只能建立一個Windows應用程式來對擴充控制項進行測試。
添加一個測試專案
?自訂控制項(Custom Controls):直接從System.Windows.Forms.Control類派生,也就是完全由自己來設計、從頭開始建立一個全新的控制項。
這是最靈活、最強大的方法,但是,對開發人員的要求也是最高的。
要實現一個自訂控制項,可以使用Control類提供的最基本的功能。
Control類提供了建立一個控制項所需要的準系統,包括滑鼠和鍵盤處理事件等,但是,要注意的是,Control類沒有提供建立一個控制項所需要的圖形介面和特定的功能。因此,要建立一個自訂控制項,必須自己來繪製控制項的介面和特定的功能。
要繪製自訂控制項的介面,必須在OnPaint事件中編寫代碼,在OnPaint事件中實現自訂控制項的繪製工作。同時還可能重寫Control類的WndProc方法,來處理底層的Windows訊息。
所以說,要實現一個自訂控制項,對開發人員的要求較高,要求開發人員必須瞭解GDI+和Windows API的知識。
建立自訂控制項是開發自己的控制項三種方法中最複雜的,因為,控制項長什麼樣子,自己來寫;控制項有什麼屬性,自己來寫;控制項用什麼功能,自己來寫。
建立自訂控制項的步驟:
第一步:建立一個類庫項目(直接從Control類派生) 或者 建立一個Windows控制項陳列庫項目(從UserControl派生)
第二步:添加引用 (如果是直接從Control類派生才需要)
一般而言,自訂控制項都有相應的使用者介面,因此,至少需要添加System.Windows.Forms的引用
第三步:重寫OnPaint事件,繪製使用者介面
第四步:向自訂控制項添加屬性和實現功能
第五步:產生自訂控制項
第六步:把自訂控制項顯示在工具箱中,並設定相應表徵圖
第七步:測試自訂控制項
自訂控制項的測試:
如果自訂控制項是從Control類派生的,那麼,自訂控制項就不能在“UserControl測試容器”中進行測試,只能建立一個Windows應用程式來對自訂控制項進行測試。
當然,自訂控制項也不一定非要從Control類派生,也可以從UserControl類派生而來,如果是從UserControl類派生而來,就可以在“UserControl測試容器”中進行測試。
建立自訂控制項的步驟:
第一步:建立一個類庫項目(直接從Control類派生) 或者 建立一個Windows控制項陳列庫項目(從UserControl派生)
第二步:添加一個Timer控制項,並設定屬性和事件
第三步:重寫OnPaint事件,繪製使用者介面
第四步:產生自訂控制項
第五步:測試自訂控制項
也可以建立一個TestCustomControls項目
C#自訂控制項開發