C#自訂控制項開發

來源:互聯網
上載者:User

標籤:

自訂控制項開發

 

一般而言,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#自訂控制項開發

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.