zoukankan      html  css  js  c++  java
  • 事件的委托(转自cnblogs)

    一、 认识委托

        一个简单的例子:
     
        张三看到餐桌上有一个桔子,由于自己怕动(主要是出于自己要玩游戏,走不开),立刻就对着他妈妈喊:“我要吃桔子,妈妈帮我拿过来。”,接着,他妈妈听到乖儿子要吃桔子,就立刻送去给儿子了。
        从某种意义上来说,把儿子发出消息要桔子的动作妈妈送桔子给儿子的动作相关联的过程就称为委托,也就是说儿子发出消息要桔子这个事件委派妈妈根据他的消息内容去完成他想要做的事。


    二、事件委托
     好,现在我们对委托有一定的了解了,现在开始事件委托的历程,例如:有一个按钮
      
     Button –> 赋值 –> 引发ButtonTextChangeEvent –> 调用相应的处理程序


     private Button button;
        public delegate void ButtonTextChangeEventHander(object sender, System.EventArgs e); //事件委托的声明。

        protected void Page_Load(object sender, EventArgs e)
        {

            if (!Page.IsPostBack)
            {

                Show();//调用button触发的事件;
                SetValues();//给按钮的Text附值
           
            }

        }
        //调用button触发的事件;
        public void Show()
        {
            button = new Button();

            button.TxtChange += new ButtonTextChangeEventHander(button_TxtChange); 

       
        }

        //给按钮的Text附值
        public void SetValues()
        {
            string[] values = { "AAA", "BBB", "CCC", "DDD", "EEE" };
            for (int i = 0; i < 5; i++)
            {
                //主要是让程序有个阻塞输出,可以停留一会儿,让你一次看个够J,对理解委托没什么意义。
                Thread.Sleep(2000);
                //进行赋值,从而引发事件而直接调用button_TxtChange事件处理函数。
                button.Text = values[i];
            }
        }
      //按钮要触发的时间
        private void button_TxtChange(object sender, System.EventArgs e)
        {
            Response.Write(" Button实例新值。其值为:" + ((Button)sender).Text);
        }

       

        //以下是对象的属性设计

        public class Button
        {
            public event ButtonTextChangeEventHander TxtChange; //定义一个事件委托的引用,以备外部进行事件的绑定.
            private string _Text;
            public string Text
            {
                get { return _Text; }
                set
                {
                    _Text = value;

                    System.EventArgs e = new EventArgs(); //这里是事件的基类实例.

                    ChangeTxt(e); //调用事件处理函数.
                }
            }
            private void ChangeTxt(System.EventArgs e)
            {
                if (TxtChange != null)
                    TxtChange(this, e);//真正调用外部指派的处理函数.
            }
        }

    输出结果:

    Button实例新值。其值为:AAA
    Button实例新值。其值为:BBB
    Button实例新值。其值为:CCC
    Button实例新值。其值为:DDD
    Button实例新值。其值为:EEE
  • 相关阅读:
    SQL Server 文件规划 位置规划
    在VS2008中使用WSE 3.0过程全记录
    关于CDC功能的答疑
    SQL Server 2008 : 基于策略的管理(PolicyBased Management)
    使用 Google Gears 开发离线应用
    SQL Server 2008 :安装
    WCF 之UserName身份验证全记录
    SQL Server 文件规划 文件组
    不可思议的SQLite
    使用Trigger让UpdatePanel外部的控件也支持无刷新异步调用
  • 原文地址:https://www.cnblogs.com/xiaobaigang/p/857806.html
Copyright © 2011-2022 走看看