標籤:blog 使用 代碼 new div .net
C# 使用委託模型 來實現事件,事件的處理方法不必在將建置事件的類中定義,需要做的事情就是把事件來源和事件處理常式結合起來,使用事件處理委託,簡稱事件委託可以定義為建置事件的類的一個成員,事件委託為多播的。
事件委託的形式
public delegate void MouseHandler(object source , EventArgs e)
object souce 為事件來源(表示發生事件的來源,比如 button)
EventArgs :System.EventArgs類的執行個體或者衍生類別的執行個體,它包含事件的另外資訊。
.NET Framework 定義了大量的事件處理委託
如:public delegate void KeyEventHanlder(boject souce ,KeyEventArgs args)
如:public delegate void MouseEventHanlder(boject souce ,MouseEventArgs args)
..........................................................................................................................................................................................................
使用者自訂事件委託(只為說明下事件委託運行原理)
public delegate void NameEventHandler (object souce,NewEventArgs e)
必須自己定義 NewEventArgs類,NewEventArgs 為System.EventArgs的衍生類別
建立事件委託的執行個體 不用new 關鍵詞,使用 envet關鍵字 pubic event NameEventHandler namehandler;
觸發事件
1)把事件委託的一個執行個體定義為類的成員
比如button的Click事件 把事件委託的一個執行個體成員定義到button類中
2)確定何時建置事件代碼
3)定義產生提供事件的EventArgs對象代碼
Demo
public class NameListEventArgs:EventArgs{ public string name; public int count; public NameListEventArgs(string name,int count) { this.name=name; this.count=count; } public string Name { get{ return name;} set{name=value} } public int Cout { get{return count;} set{count=value;} }}
public class Namelist //相當於事件來源類,如發生單擊事件的button類{ ArrayList list; public event NameListEventhandler nameListEvent; pubic Namelist() { list =new ArrayList(); } public void Add (string name) { list.Add(name); if(nameListEvent !=null) { nameListEvent (this ,new NameListEventArgs(name,listCount) ); //new NameListEventArgs(name,listCount) 為EventArgs的衍生類別的執行個體 } }}
namespace Demo{ public class TestDemo { private void button_Click(object sender ,EventArgs e) { NameList name =new NameList(); name.nameListEvent+=new NameListEventHandler(NewName); name.nameListEvent+=new NameListEventHandler(CurrentCount); name.Add("Msdn"); name.Add("Webcast"); } public static void NewName(object souce,NameListEventArgs e) { console.write("sssssss"); } public static void CurrentCount(object souce,NameListEventArgs e) { console.write("qqqqq"); } }}