委托可以這么來理解,委托就像是定義一個指針(C++),提供入口。
1 實例1:執行一個委托定義的方法
第一步:定義一個委托
public delegate void Computer(); //委托用delegate定義,此方法是void類型,並且沒有任何參數
第二步:定義一個和委托類型相同的方法,計算兩數之和
private void MathOpt()
{
int a =1;
int b = 2;
int sum=a +b;
Response.Write(sum.tostring());
}
第三步:在一個按鈕的click事件中
private void button1_Click(object sender, EventArgs e)
{
Computer com;//實例
com = MathOpt;//類似指針,將方法的地址賦值委托類型的變量
com();
}
好了,這樣就執行了一個委托的方法,當系統執行到com()的時候,就相當於執行方法MathOpt(),如果有參數,那么在定義委托的時候和方法有相同的參數即可。
有了委托就可以定義事件了
實例2:定義一個事件
功能:在父子窗體間通信,如在子窗體輸入條件,在父窗體中查詢,類似Office的查找
定義窗體:假設父窗體為Frm1,子窗體為Frm2
第一步在Frm2中定義事件:
public delegate void FullSearch(string key); //定義全文檢索的委托事件
public event FullSearch FullSearchOrder; //用委托定義一個檢索的事件(會在父窗體中執行功能)
第二步在Frm2的“查詢”按鈕事件中執行:
private void btnSearch_Click(object sender, System.EventArgs e)
{
if(FullSearchOrder !=null)
FullSearchOrder(this.txtKey .Text ); //此時不用考慮如何查詢,只傳遞一個查詢關健字即可
}
第三步轉到Frm1中處理事件
3-1 在父窗體中的彈出子窗體時產生定義的那個事件方法:如
Frm2 frm2=new Frm2(key); //key為要查詢的關健字,與定義事件方法參數保持一至
frm2.FullSearchOrder +=new .Frm2.FullSearch(frm2_FullSearchOrder); //執行這句會自動產生一個事件frm1_FullSearchOreder
frm2.ShowDialog ();
3-2 在系統產生的事件中完成查詢功能就OK了
private void frm2_FullSearchOrder(string key)
{
//這里完成查詢的方法
}
到這里就好了,不同窗體間就可以通信了,在彈出的子窗體中就可以執行父窗體中的方法了,原理都是利用委托。