成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#自定義控件入門教程

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

平臺:VS 2005 WINFORM

語言:C#

C#自定義控件最終效果圖:

最終效果圖


光看看圖片似乎說明不了什么問題,還是接著往下看吧!

要想在VS 2005 winform 中編輯C#自定義控件,步驟如下:

1.點擊文件->新建項目->選擇Windows控件庫

2.編輯控件

3.點擊生成->生成 項目名稱 ,完成這一步后會在bin或debug目錄下看到"項目名稱.dll"文件,這個便是你的控件庫了

4.在需要使用該控件的程序中點擊工具->選擇工具項->瀏覽->選擇剛才的那個.dll文件,這樣你便會在你的工具箱中找到你的那個控件

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

首先我們對這個自定義控件取個名字:ColorHatch;

接下來我們對這個界面進行布局修改成和效果圖類似的界面.

然后就開始對代碼進行編輯了.

分析1:我們需要一個panel1來顯示我們所選擇的顏色我們所選擇的顏色;同時我們希望可以在調用控件的程序中直接對其初始顏色進行設置;

那么現在我們就來實現分析1中的要求:這里主要的問題就是如何來給我們的這個控件定義一個外部屬性,以至我們可以在屬性設計視圖中對其進行設置.

定義屬性的方法是首先聲明一個private 變量 private Color hatchColor;然后我們編寫set與get方法,也就是對應的屬性賦值與取值的方法

  1. [Description("設置當前顏色")]//顯示在屬性設計視圖中的描述  
  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.    } 

這樣我們的這個外部屬性就做好了.這個效果只能在調用這個控件的窗體中才能查看.

分析2:當調用該控件的窗體運行時,我們希望能有一個方法將所選中的顏色傳遞給所調用的窗體;我們可以聯想下其它控件是如何與主窗體傳遞信息的(不是通過屬性就是事件),我們這里肯定是要在選擇某種顏色后便將顏色傳遞給主窗體,所以我們要采用事件來進行處理.

因為控件本身并不提供此事件,所以我們自然是要自己定義一個事件.

關于"事件",詳細講起來就差不多可以專門寫一片了.我們這里只是簡單介紹下如何自己定義事件,大家可以去網上查查資料,記得陳廣的c#語言參考視頻中就有講到.

C#自定義控件編寫事件的主要步驟如下:

1.創建一個委托(關于委托這里不做介紹)2.聲明一個事件 3.定義一個觸發事件的方法

現在我們就來寫一下這個事件:

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

ColorChanged(this,e)其實是使用委托調用一個事件處理方法,這個事件處理方法就是我們雙擊事件時自動生成的一個方法.就好像我們雙擊click時,便會自動生成一個private panel1_click(object sender,EventArgs e).

但是單單寫完這些我們還無法在調用方找到這個事件,因為我們現在只是完成了一個事件,還沒有和我們的控件進行關聯.我們必須在控件需要調用這個事件的地方,加上事件觸發方法.我們要知道使用這個事件的前提是panel1中的顏色被改變,也就是說在我們選取了新的顏色時觸發此方法,如下:

  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));//因為顏色改變所以觸發事件  
  9.             }  
  10.         } 

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

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

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

  1. public class ColorChangedEventArgs : EventArgs  
  2.     {  
  3.         private Color color;  
  4.  
  5.         /**////   
  6.         /// 顏色改變事件數據  
  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#自定義控件的主要問題就已經解決了,可能有的朋友看得比較暈,所以建議先去了解一下.NET中的事件.

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

控件的窗體中的效果

【編輯推薦】

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

2009-08-03 13:34:06

自定義C#控件

2009-08-03 13:39:46

C#自定義用戶控件

2023-09-04 15:06:18

Pytorch靜態量化動態量化

2024-09-11 14:46:48

C#旋轉按鈕

2009-08-04 13:23:40

C# 自定義控件dll

2009-08-03 14:46:12

C#自定義控件

2009-08-04 08:58:01

C#自定義特性

2009-09-11 11:04:23

C# WinForm自

2014-09-24 11:42:46

AndroidButton

2009-08-10 14:16:59

ASP.NET自定義控

2009-08-03 14:42:50

C#自定義控件

2009-08-28 17:45:19

C#自定義數據

2009-09-03 15:46:57

C#自定義事件

2010-08-03 16:13:01

FlexBuilder

2009-08-04 12:40:34

c#自定義事件

2009-08-12 14:53:50

C#類型轉換函數

2021-06-17 06:52:37

C#自定義異常

2009-08-04 12:56:51

C#自定義事件

2009-08-04 09:56:46

C#事件處理自定義事件

2013-04-19 10:14:24

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品欧美久久 | 国产一区二区电影网 | 国产精品一区二区三区久久 | 天天欧美 | 欧美成人免费在线 | caoporn地址 | 亚洲免费视频一区二区 | 日韩综合一区 | 免费黄色片在线观看 | 国产精品一区二区三区在线 | 午夜精品久久久久久久久久久久久 | 久久国产亚洲精品 | 91国自视频 | 男人天堂99 | 国产精品久久久久久久久免费桃花 | 欧美日韩在线一区二区三区 | 亚洲狠狠爱| 久久亚洲天堂 | 亚洲 中文 欧美 日韩 在线观看 | 日韩欧美在线不卡 | av资源网站 | 81精品国产乱码久久久久久 | 免费精品久久久久久中文字幕 | 精品国产一区二区久久 | 天天插天天舔 | 免费亚洲一区二区 | 男人天堂免费在线 | 久久久www成人免费无遮挡大片 | 亚洲男人的天堂网站 | av一区二区三区四区 | 国产成人综合久久 | 亚洲麻豆 | 成人黄色网址大全 | www.久久| 亚洲一区免费在线 | 久久小视频 | 97碰碰碰| 日韩视频精品在线 | 精品国产91乱码一区二区三区 | 成人免费小视频 | 午夜国产精品视频 |