簡單的委托與事件實例


委托可以這么來理解,委托就像是定義一個指針(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)
       {
               //這里完成查詢的方法
       }

到這里就好了,不同窗體間就可以通信了,在彈出的子窗體中就可以執行父窗體中的方法了,原理都是利用委托。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM