自定義控件開發
一般而言,Visual Studio 2005中自帶的幾十種控件已經足夠我們使用了,但是,在一些特殊的需求中,可能需要一些特殊的控件來與用戶進行交互,這時,就需要我們自己開發新的、滿足用戶需求的控件。(www.hicode.cn)
要開發自己的控件,有幾種方法:
復合控件(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測試容器”中進行測試。(www.hicode.cn)
創建自定義控件的步驟:
第一步:新建一個類庫項目(直接從Control類派生) 或者 新建一個Windows控件庫項目(從UserControl派生)
第二步:添加一個Timer控件,並設置屬性和事件
第三步:重寫OnPaint事件,繪制用戶界面
第四步:生成自定義控件
第五步:測試自定義控件
也可以新建一個TestCustomControls項目
ActiveX控件(可以考慮不講)
實際上還有一種控件沒有給大家將,那就是ActiveX控件。