C#自定義控件開發


自定義控件開發

 

一般而言,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項目

 

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM