C#自定義控件入門教程
平臺:VS 2005 WINFORM
語言:C#
C#自定義控件最終效果圖:

光看看圖片似乎說明不了什么問題,還是接著往下看吧!
要想在VS 2005 winform 中編輯C#自定義控件,步驟如下:
1.點(diǎn)擊文件->新建項(xiàng)目->選擇Windows控件庫
2.編輯控件
3.點(diǎn)擊生成->生成 項(xiàng)目名稱 ,完成這一步后會在bin或debug目錄下看到"項(xiàng)目名稱.dll"文件,這個便是你的控件庫了
4.在需要使用該控件的程序中點(diǎn)擊工具->選擇工具項(xiàng)->瀏覽->選擇剛才的那個.dll文件,這樣你便會在你的工具箱中找到你的那個控件
今天要寫的主要是第二個步驟,其它的大家自己去掌握.
新建一個項(xiàng)目后會得到如右圖所示的界面:
首先我們對這個自定義控件取個名字:ColorHatch;
接下來我們對這個界面進(jìn)行布局修改成和效果圖類似的界面.
然后就開始對代碼進(jìn)行編輯了.
分析1:我們需要一個panel1來顯示我們所選擇的顏色;同時我們希望可以在調(diào)用控件的程序中直接對其初始顏色進(jìn)行設(shè)置;
那么現(xiàn)在我們就來實(shí)現(xiàn)分析1中的要求:這里主要的問題就是如何來給我們的這個控件定義一個外部屬性,以至我們可以在屬性設(shè)計視圖中對其進(jìn)行設(shè)置.
定義屬性的方法是首先聲明一個private 變量 private Color hatchColor;然后我們編寫set與get方法,也就是對應(yīng)的屬性賦值與取值的方法
- [Description("設(shè)置當(dāng)前顏色")]//顯示在屬性設(shè)計視圖中的描述
- [DefaultValue(typeof(Color), "Black")]//給予初始值
- public Color HatchColor
- {
- get { return hatchColor; }
- set
- {
- hatchColor = value;
- panel1.BackColor = value;
- }
- }
這樣我們的這個外部屬性就做好了.這個效果只能在調(diào)用這個控件的窗體中才能查看.
分析2:當(dāng)調(diào)用該控件的窗體運(yùn)行時,我們希望能有一個方法將所選中的顏色傳遞給所調(diào)用的窗體;我們可以聯(lián)想下其它控件是如何與主窗體傳遞信息的(不是通過屬性就是事件),我們這里肯定是要在選擇某種顏色后便將顏色傳遞給主窗體,所以我們要采用事件來進(jìn)行處理.
因?yàn)榭丶旧聿⒉惶峁┐耸录?,所以我們自然是要自己定義一個事件.
關(guān)于"事件",詳細(xì)講起來就差不多可以專門寫一片了.我們這里只是簡單介紹下如何自己定義事件,大家可以去網(wǎng)上查查資料,記得陳廣的c#語言參考視頻中就有講到.
C#自定義控件編寫事件的主要步驟如下:
1.創(chuàng)建一個委托(關(guān)于委托這里不做介紹)2.聲明一個事件 3.定義一個觸發(fā)事件的方法
現(xiàn)在我們就來寫一下這個事件:
- public delegate void ColorChangedEventHandler(object sender, ColorChangedEventArgs e);//事件所需的委托
- //當(dāng)顏色改變時觸發(fā)事件
- public event ColorChangedEventHandler ColorChanged;//定義一個ColorChanged事件
- protected virtual void OnColorChanged(ColorChangedEventArgs e)
- {//事件觸發(fā)方法
- if (ColorChanged != null)
- {//判斷事件是否為空
- ColorChanged(this, e);//觸發(fā)事件
- }
- }
ColorChanged(this,e)其實(shí)是使用委托調(diào)用一個事件處理方法,這個事件處理方法就是我們雙擊事件時自動生成的一個方法.就好像我們雙擊click時,便會自動生成一個private panel1_click(object sender,EventArgs e).
但是單單寫完這些我們還無法在調(diào)用方找到這個事件,因?yàn)槲覀儸F(xiàn)在只是完成了一個事件,還沒有和我們的控件進(jìn)行關(guān)聯(lián).我們必須在控件需要調(diào)用這個事件的地方,加上事件觸發(fā)方法.我們要知道使用這個事件的前提是panel1中的顏色被改變,也就是說在我們選取了新的顏色時觸發(fā)此方法,如下:
- private void panel_Click(object sender, EventArgs e)
- {
- Panel p = sender as Panel;
- if (p != null)
- {
- hatchColor = p.BackColor;
- panel1.BackColor = hatchColor;
- OnColorChanged(new ColorChangedEventArgs(hatchColor));//因?yàn)轭伾淖兯杂|發(fā)事件
- }
- }
加了以上這步后,我們就可以在調(diào)用這個控件的窗體的事件中找到這個自定義事件了.這樣我們就可以像使用一般事件一樣,雙擊進(jìn)行事件處理方法的編寫了.
這時有些朋友可能會問ColorChangedEventArgs是什么了?這個東西是不是很眼熟?是不是和EventArgs很像?我們在click事件中可以經(jīng)常碰見.EventArgs是用戶傳入的參數(shù),我們這個ColorChangedEventArgs就是繼承自這個EventArgs的一個類,目的是用來傳遞我們選中的顏色給調(diào)用方.
下面我們來看一下這個ColorChangedEventArgs類
- public class ColorChangedEventArgs : EventArgs
- {
- private Color color;
- /**////
- /// 顏色改變事件數(shù)據(jù)
- ///
- /// 改變后的顏色
- public ColorChangedEventArgs(Color c)
- {
- color = c;
- }
- /**////
- /// 獲取顏色
- ///
- public Color GetColor
- {
- get { return color; }
- }
- }
這樣一個C#自定義控件的主要問題就已經(jīng)解決了,可能有的朋友看得比較暈,所以建議先去了解一下.NET中的事件.
***我們來看下在調(diào)用這個C#自定義控件的窗體中的效果:
【編輯推薦】