简单实例说明委托和事件。

刚在blog上看到有位兄弟写的,感觉不错转了过来。

当时学习.net的时候只知道事件驱动,却搞不懂什么是委托更不会定义事件,当然就不能写出什么高质量的程序,以下是个人对委托的理解,用最简单的实例讲解,给初学者一点提示吧,高手就不用看了,呵呵:)

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值