C# 自定义控件入门
原文地址:http://www.itdaan.com/blog/2008/03/29/95500785fa538b3900b34ee824376e8b.html
這幾天為了什么"評估",搞得莫名的緊張,現(xiàn)在評估組走了,反而開始覺得有點無聊了.
為了完善仿Windows的畫板,做了一個很原始的顏色抬取控件.現(xiàn)在將大致的過程介紹下.大家也可以直接下載工程文件.
平臺:VS 2005 WINFORM
語言:C#
最終效果圖:
光看看圖片似乎說明不了什么問題,還是接著往下看吧!
要想在VS 2005 winform 中編輯自定義控件,步驟如下:
1.點擊文件->新建項目->選擇Windows控件庫
2.編輯控件
3.點擊生成->生成 項目名稱 ,完成這一步后會在bin或debug目錄下看到"項目名稱.dll"文件,這個便是你的控件庫了
4.在需要使用該控件的程序中點擊工具->選擇工具項->瀏覽->選擇剛才的那個.dll文件,這樣你便會在你的工具箱中找到你的那個控件
今天要寫的主要是第二個步驟,其它的大家自己去掌握.
新建一個項目后會得到如右圖所示的界面:
首先我們對這個自定義控件取個名字:ColorHatch;
接下來我們對這個界面進(jìn)行布局修改成和效果圖類似的界面.
然后就開始對代碼進(jìn)行編輯了.
分析1:我們需要一個panel1來顯示我們所選擇的顏色 ;同時我們希望可以在調(diào)用控件的程序中直接對其初始顏色進(jìn)行設(shè)置;
那么現(xiàn)在我們就來實現(xiàn)分析1中的要求:
這里主要的問題就是如何來給我們的這個控件定義一個外部屬性,以至我們可以在屬性設(shè)計視圖中對其進(jìn)行設(shè)置.
定義屬性的方法是首先聲明一個private 變量 private Color hatchColor;
然后我們編寫set與get方法,也就是對應(yīng)的屬性賦值與取值的方法
????????[DefaultValue( typeof (Color),? " Black " )] // 給予初始值
???????? public ?Color?HatchColor
???????? {
????????????get?{?return?hatchColor;?}
????????????set
????????????{
????????????????hatchColor?=?value;
????????????????panel1.BackColor?=?value;
????????????}
????????}
這樣我們的這個外部屬性就做好了.這個效果只能在調(diào)用這個控件的窗體中才能查看.
分析2:當(dāng)調(diào)用該控件的窗體運行時,我們希望能有一個方法將所選中的顏色傳遞給所調(diào)用的窗體;我們可以聯(lián)想下其它控件是如何與主窗體傳遞信息的(不是通過屬性就是事件),我們這里肯定是要在選擇某種顏色后便將顏色傳遞給主窗體,所以我們要采用事件來進(jìn)行處理.
因為控件本身并不提供此事件,所以我們自然是要自己定義一個事件.
關(guān)于"事件",詳細(xì)講起來就差不多可以專門寫一片了.我們這里只是簡單介紹下如何自己定義事件,大家可以去網(wǎng)上查查資料,記得陳廣的c#語言參考視頻中就有講到.
編寫事件的主要步驟如下:
1.創(chuàng)建一個委托(關(guān)于委托這里不做介紹)2.聲明一個事件 3.定義一個觸發(fā)事件的方法
現(xiàn)在我們就來寫一下這個事件:
???????? // 當(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)其實是使用委托調(diào)用一個事件處理方法,這個事件處理方法就是我們雙擊事件時自動生成的一個方法.就好像我們雙擊click時,便會自動生成一個private panel1_click(object sender,EventArgs e).
但是單單寫完這些我們還無法在調(diào)用方找到這個事件,因為我們現(xiàn)在只是完成了一個事件,還沒有和我們的控件進(jìn)行關(guān)聯(lián).我們必須在控件需要調(diào)用這個事件的地方,加上事件觸發(fā)方法.我們要知道使用這個事件的前提是panel1中的顏色被改變,也就是說在我們選取了新的顏色時觸發(fā)此方法,如下:
???????? {
????????????Panel?p?=?sender?as?Panel;
????????????if?(p?!=?null)
????????????{
????????????????hatchColor?=?p.BackColor;
????????????????panel1.BackColor?=?hatchColor;
????????????????OnColorChanged(new?ColorChangedEventArgs(hatchColor));//因為顏色改變所以觸發(fā)事件
????????????}
????????}
加了以上這步后,我們就可以在調(diào)用這個控件的窗體的事件中找到這個自定義事件了.這樣我們就可以像使用一般事件一樣,雙擊進(jìn)行事件處理方法的編寫了.
這時有些朋友可能會問ColorChangedEventArgs是什么了?這個東西是不是很眼熟?是不是和EventArgs很像?我們在click事件中可以經(jīng)常碰見.EventArgs是用戶傳入的參數(shù),我們這個ColorChangedEventArgs就是繼承自這個EventArgs的一個類,目的是用來傳遞我們選中的顏色給調(diào)用方.
下面我們來看一下這個ColorChangedEventArgs類
???? {
????????private?Color?color;
????????///?<summary>
????????///?顏色改變事件數(shù)據(jù)
????????///?</summary>
????????///?<param?name="c">改變后的顏色</param>
????????public?ColorChangedEventArgs(Color?c)
????????{
????????????color?=?c;
????????}
????????///?<summary>
????????///?獲取顏色
????????///?</summary>
????????public?Color?GetColor
????????{
????????????get?{?return?color;?}
????????}
????}
這樣一個自定義控件的主要問題就已經(jīng)解決了,可能有的朋友看得比較暈,所以建議先去了解一下.NET中的事件.
最后我們來看下在調(diào)用這個控件的窗體中的效果:
整個工程文件
轉(zhuǎn)載于:https://www.cnblogs.com/boonya/p/9110328.html
總結(jié)
以上是生活随笔為你收集整理的C# 自定义控件入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修改unity变量名但不丢失序列化值
- 下一篇: RPAD()和LPAD()函数进行字符串