简单的委托与事件实例

委托可以这么来理解,委托就像是定义一个指针(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)
       {
               //这里完成查询的方法
       }

到这里就好了,不同窗体间就可以通信了,在弹出的子窗体中就可以执行父窗体中的方法了,原理都是利用委托。

posted @ 2019-07-07 19:34  霖薇暮  阅读(2743)  评论(0编辑  收藏  举报