標籤:des winform blog http color 使用
自訂控制項初學成果:
為了完善仿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中的事件.
最後我們來看下在調用這個控制項的表單中的效果: