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

C#自定義控件入門教程

開發(fā) 后端
為了完善仿Windows的畫板,做了一個很原始的顏色抬取控件,現(xiàn)在將大致的過程介紹下。大家也可以直接下載工程文件。

平臺: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文件,這樣你便會在你的工具箱中找到你的那個控件

今天要寫的主要是第二個步驟,其它的大家自己去掌握.[[4989]]
新建一個項(xiàng)目后會得到如右圖所示的界面:2008329241.jpg

首先我們對這個自定義控件取個名字: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)的屬性賦值與取值的方法

  1. [Description("設(shè)置當(dāng)前顏色")]//顯示在屬性設(shè)計視圖中的描述  
  2.    [DefaultValue(typeof(Color), "Black")]//給予初始值  
  3.    public Color HatchColor  
  4.    {  
  5.        get { return hatchColor; }  
  6.        set 
  7.        {  
  8.            hatchColor = value;  
  9.            panel1.BackColor = value;  
  10.        }  
  11.    } 

這樣我們的這個外部屬性就做好了.這個效果只能在調(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)在我們就來寫一下這個事件:

  1. public delegate void ColorChangedEventHandler(object sender, ColorChangedEventArgs e);//事件所需的委托  
  2.  
  3.         //當(dāng)顏色改變時觸發(fā)事件  
  4.         public event ColorChangedEventHandler ColorChanged;//定義一個ColorChanged事件  
  5.  
  6.         protected virtual void OnColorChanged(ColorChangedEventArgs e)  
  7.         {//事件觸發(fā)方法  
  8.             if (ColorChanged != null)  
  9.             {//判斷事件是否為空  
  10.                 ColorChanged(this, e);//觸發(fā)事件  
  11.             }  
  12.         } 

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ā)此方法,如下:

  1. private void panel_Click(object sender, EventArgs e)  
  2.         {  
  3.             Panel p = sender as Panel;  
  4.             if (p != null)  
  5.             {  
  6.                 hatchColor = p.BackColor;  
  7.                 panel1.BackColor = hatchColor;  
  8.                 OnColorChanged(new ColorChangedEventArgs(hatchColor));//因?yàn)轭伾淖兯杂|發(fā)事件  
  9.             }  
  10.         } 

加了以上這步后,我們就可以在調(diào)用這個控件的窗體的事件中找到這個自定義事件了.這樣我們就可以像使用一般事件一樣,雙擊進(jìn)行事件處理方法的編寫了.

這時有些朋友可能會問ColorChangedEventArgs是什么了?這個東西是不是很眼熟?是不是和EventArgs很像?我們在click事件中可以經(jīng)常碰見.EventArgs是用戶傳入的參數(shù),我們這個ColorChangedEventArgs就是繼承自這個EventArgs的一個類,目的是用來傳遞我們選中的顏色給調(diào)用方.

下面我們來看一下這個ColorChangedEventArgs類

  1. public class ColorChangedEventArgs : EventArgs  
  2.     {  
  3.         private Color color;  
  4.  
  5.         /**////   
  6.         /// 顏色改變事件數(shù)據(jù)  
  7.         ///   
  8.         /// 改變后的顏色  
  9.         public ColorChangedEventArgs(Color c)  
  10.         {  
  11.             color = c;  
  12.         }  
  13.  
  14.         /**////   
  15.         /// 獲取顏色  
  16.         ///   
  17.         public Color GetColor  
  18.         {  
  19.             get { return color; }  
  20.         }  
  21.     } 

這樣一個C#自定義控件的主要問題就已經(jīng)解決了,可能有的朋友看得比較暈,所以建議先去了解一下.NET中的事件.

***我們來看下在調(diào)用這個C#自定義控件的窗體中的效果:

控件的窗體中的效果

【編輯推薦】

  1. 強(qiáng)類型和Actor:ActorLite的演示
  2. C#的Tag Message回顧:繁瑣而危險
  3. Erlang的Actor回顧:將消息轉(zhuǎn)化為邏輯執(zhí)行
  4. Actor模型的本質(zhì):究竟是要解決什么問題
  5. 順暢的使用C# Actor:另一個解決方案
責(zé)任編輯:彭凡 來源: cnblogs
相關(guān)推薦

2009-08-03 13:34:06

自定義C#控件

2009-08-03 13:39:46

C#自定義用戶控件

2023-09-04 15:06:18

Pytorch靜態(tài)量化動態(tài)量化

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#自定義特性

2014-09-24 11:42:46

AndroidButton

2009-08-10 14:16:59

ASP.NET自定義控

2009-08-03 14:42:50

C#自定義控件

2010-08-03 16:13:01

FlexBuilder

2009-09-03 15:46:57

C#自定義事件

2009-08-28 17:45:19

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

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ù)

2013-04-19 10:14:24

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號