日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 自定义控件入门

發布時間:2025/3/15 C# 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 自定义控件入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://www.itdaan.com/blog/2008/03/29/95500785fa538b3900b34ee824376e8b.html

這幾天為了什么"評估",搞得莫名的緊張,現在評估組走了,反而開始覺得有點無聊了.
  為了完善仿Windows的畫板,做了一個很原始的顏色抬取控件.現在將大致的過程介紹下.大家也可以直接下載工程文件.  
  平臺:VS 2005 WINFORM
  語言:C#
  最終效果圖:


  光看看圖片似乎說明不了什么問題,還是接著往下看吧!
  
  要想在VS 2005 winform 中編輯自定義控件,步驟如下:
  1.點擊文件->新建項目->選擇Windows控件庫
  2.編輯控件
  3.點擊生成->生成 項目名稱 ,完成這一步后會在bin或debug目錄下看到"項目名稱.dll"文件,這個便是你的控件庫了
  4.在需要使用該控件的程序中點擊工具->選擇工具項->瀏覽->選擇剛才的那個.dll文件,這樣你便會在你的工具箱中找到你的那個控件
  
  今天要寫的主要是第二個步驟,其它的大家自己去掌握.
  新建一個項目后會得到如右圖所示的界面:
  首先我們對這個自定義控件取個名字:ColorHatch;
  接下來我們對這個界面進行布局修改成和效果圖類似的界面.
  然后就開始對代碼進行編輯了.
  分析1:我們需要一個panel1來顯示我們所選擇的顏色 ;同時我們希望可以在調用控件的程序中直接對其初始顏色進行設置;
  那么現在我們就來實現分析1中的要求:
  這里主要的問題就是如何來給我們的這個控件定義一個外部屬性,以至我們可以在屬性設計視圖中對其進行設置.
  定義屬性的方法是首先聲明一個private 變量 private Color hatchColor;
  然后我們編寫set與get方法,也就是對應的屬性賦值與取值的方法
  

 ??? [Description( " 設置當前顏色 " )]  // 顯示在屬性設計視圖中的描述
????????[DefaultValue( typeof (Color),? " Black " )] // 給予初始值
???????? public ?Color?HatchColor
???????? {
????????????get?{?return?hatchColor;?}
????????????set
????????????{
????????????????hatchColor?=?value;
????????????????panel1.BackColor?=?value;
????????????}
????????}

  這樣我們的這個外部屬性就做好了.這個效果只能在調用這個控件的窗體中才能查看.
  
  分析2:當調用該控件的窗體運行時,我們希望能有一個方法將所選中的顏色傳遞給所調用的窗體;我們可以聯想下其它控件是如何與主窗體傳遞信息的(不是通過屬性就是事件),我們這里肯定是要在選擇某種顏色后便將顏色傳遞給主窗體,所以我們要采用事件來進行處理.
  因為控件本身并不提供此事件,所以我們自然是要自己定義一個事件.
  關于"事件",詳細講起來就差不多可以專門寫一片了.我們這里只是簡單介紹下如何自己定義事件,大家可以去網上查查資料,記得陳廣的c#語言參考視頻中就有講到.
  編寫事件的主要步驟如下:
  1.創建一個委托(關于委托這里不做介紹)2.聲明一個事件 3.定義一個觸發事件的方法
  
  現在我們就來寫一下這個事件:

public ? delegate ? void ?ColorChangedEventHandler( object ?sender,?ColorChangedEventArgs?e); // 事件所需的委托

???????? // 當顏色改變時觸發事件
???????? public ? event ?ColorChangedEventHandler?ColorChanged; // 定義一個ColorChanged事件

???????? protected ? virtual ? void ?OnColorChanged(ColorChangedEventArgs?e)
???????? {//事件觸發方法
????????????if?(ColorChanged?!=?null)
????????????{//判斷事件是否為空
????????????????ColorChanged(this,?e);//觸發事件
????????????}
????????}


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

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

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


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

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

public ? class ?ColorChangedEventArgs?:?EventArgs
???? {
????????private?Color?color;

????????///?<summary>
????????///?顏色改變事件數據
????????///?</summary>
????????///?<param?name="c">改變后的顏色</param>
????????public?ColorChangedEventArgs(Color?c)
????????{
????????????color?=?c;
????????}

????????///?<summary>
????????///?獲取顏色
????????///?</summary>
????????public?Color?GetColor
????????{
????????????get?{?return?color;?}
????????}

????}


  這樣一個自定義控件的主要問題就已經解決了,可能有的朋友看得比較暈,所以建議先去了解一下.NET中的事件. 
  
  最后我們來看下在調用這個控件的窗體中的效果:



整個工程文件

轉載于:https://www.cnblogs.com/boonya/p/9110328.html

總結

以上是生活随笔為你收集整理的C# 自定义控件入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。