自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

編寫自定義C#控件心得

開發(fā) 后端
使用C#也有一段時間了,但從未自已設計過自定義C#控件,剛剛完成了一個自定義控件的設計,覺得有一些技巧和知識,可以做一個總結.

有些東西,從MSDN中很不容易找到,比如對一些屬性的描述設定.這里可以為此做一些匯兌.

我設計了一個平滑進度條自定義C#控件,這在網(wǎng)上很容易找到一些現(xiàn)成的.不過,為了學習自定義C#控件的設計,我還是自己寫了一個.

這個自定義C#控件繼承自UserControl類.原理很簡單,就是用刷子往一定的區(qū)域里面填充顏色.

設計自定義C#控件當然要有一些屬性,進度條設計中最主要的屬性就是最小值,最大值及當前值.有了屬性在VS設計器中也要有所反映,就需要對這個屬性進行描述.

就拿最小值這個屬性來說吧.在VS設計器選中這個屬性就需要有它的描述性文字以及它所屬的欄目.實現(xiàn)這兩個方面可以在屬性前加上這樣一行文字:

[Description("獲取或設置目前進度條范圍最小值"),Category("行為")]

這樣在VS設計器中該屬性就會看起來跟其它屬性一樣了.當然也可以將欄目的漢字換為英文,但目前我不知道行為在此中用什么英文表示,但外觀是使用Appearance來表示.

除了描述性文字及所屬欄目還可以有缺省值,這是很多屬性都有的.加上DefaultValue(objectvalue),就可以應用缺省值了.

在VS的屬性設計器中,經(jīng)常有這樣的屬性,比如字體,點擊后會出現(xiàn)一個字體編輯器,對于此類在VS設計器中存在的編輯器,我們可以直接使用它.

比如編輯一個字體屬性.

  1. [Description("用于顯示控件中文本的字體"),Category("Appearance")]  
  2. publicoverrideFontFont  
  3. {  
  4. get{returnm_LabelFont;}  
  5. set 
  6. {  
  7. m_LabelFont=value;  
  8. this.Invalidate();  
  9. }  
定義了它的返回值為Font,這樣在VS設計器中,就會出現(xiàn)與別的控件字體一樣的字體編輯器.與此類似的還有Color屬性,BorderStyle屬性等.

既然這個控件繼承自UserControl類,那么不可避免的會繼承一些我們不想在設計器中出現(xiàn)的屬性.比如TabStop屬性,我們不希望它應用在進度條身上,就必須要讓它在設計器中不可見.

  1. [Browsable(false)]  
  2. publicnewboolTabStop  
  3. {  
  4. get{returnbase.TabStop;}  
Browsable(boolvalue)語句可以使某個屬性可見或是隱藏.

有些繼承的屬性需要重寫,不管是對它進行一定的改變操作還是要隱藏它.重寫時需要使用override或是new,有的父類屬性中使用的是virtual,但有些沒有.沒有使用virtual的屬性,在子類中就要使用new來修飾了.

對于事件,繼承來的也有一些是不必要的,要隱藏事件,我也找了一些資料,在網(wǎng)上可不多見,只是在MSDN中費了半天勁才找到一句相關的語句.

比如對于按鍵操作進度條也是不需要,就需要在設計器中隱藏該事件.

  1. [Browsable(false)]  
  2. publicneweventEventHandlerKeyDown; 
前面是隱藏語句,后面是事件,這樣做起來,比屬性成員要簡單一些吧.:)只是在網(wǎng)絡中搜索了半天也沒有發(fā)現(xiàn)與此相關的東西.

對此繪圖部分的操作,詳細的就不在這里說了.這里只是說一些建立控件的基本東西.但是繪圖的操作主要放在一起,比如放在Paint事件中.在事件的尾部再執(zhí)行一下邊框的繪制.

當對進度條的當前值進行賦值操作時,需要在進度條內(nèi)部觸發(fā)一個繪圖的操作,可以讓Paint事件被觸發(fā).這里就需要執(zhí)行一個方法Invalidate(),這個方法宣布當前區(qū)域為無效,然后觸發(fā)Paint事件.

進度條的區(qū)域比較小,所以不太耗費圖形資源,但如果需要的圖形資源比較大,且繪圖操作觸發(fā)頻繁,就不能宣布所有區(qū)域為無效,只要宣布已經(jīng)更新的區(qū)域為無效.在取得更新區(qū)域后,使用Invalidate(Rectanglerect)方法,可以只更新部分區(qū)域.

對于圖形自定義C#控件,很多操作都需要使用Graphics類繪圖,對這個龐大的類,我沒有深入的研究,也不能在此多說,不然會說個沒完.;)

對于進度條類,也有一些描述,比如給它一個圖標,一個缺省的屬性.在這個類中我仍然使用了.NET中進度條的圖標.

  1. [ToolboxBitmap(typeof(ProgressBar)),DefaultProperty("Value")] 
在Visual Studio設計器中加入平滑進度條之后,在工具面板中出現(xiàn)的進度條圖標將是一個我們熟悉的進度條圖標.當然,我們也可以使用地址路徑或資源中的圖標來代替它.

相對的語句為:ToolboxBitmap(路徑)

【編輯推薦】

  1. C# 4.0 Dynamic關鍵字全解析
  2. 淺談C#中構造函數(shù)和成員函數(shù)
  3. C#回調(diào)函數(shù)及API應用淺析
  4. 詳解C# Object.Equals函數(shù)
  5. C#調(diào)用Windows API函數(shù)
責任編輯:彭凡 來源: cnblogs
相關推薦

2009-08-03 13:39:46

C#自定義用戶控件

2009-08-05 17:03:37

C#自定義控件

2024-09-11 14:46:48

C#旋轉(zhuǎn)按鈕

2009-08-03 14:46:12

C#自定義控件

2009-08-04 13:23:40

C# 自定義控件dll

2009-09-11 11:04:23

C# WinForm自

2009-08-04 08:58:01

C#自定義特性

2009-08-03 14:42:50

C#自定義控件

2009-09-03 15:46:57

C#自定義事件

2009-08-28 17:45:19

C#自定義數(shù)據(jù)

2009-08-06 16:58:40

C#編寫ActiveX

2009-08-28 15:05:35

C#編寫Calenda

2009-08-04 12:56:51

C#自定義事件

2021-06-17 06:52:37

C#自定義異常

2009-08-04 09:56:46

C#事件處理自定義事件

2009-08-04 12:40:34

c#自定義事件

2009-08-12 14:53:50

C#類型轉(zhuǎn)換函數(shù)

2009-06-08 20:13:36

Eclipse自定義控

2013-04-19 10:14:24

2009-08-27 14:32:15

C#編寫ActiveX
點贊
收藏

51CTO技術棧公眾號