文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>不忘本~委托与事件

不忘本~委托与事件

时间:2011-06-09  来源:Lose.zhang

MSDN是这样定义委托的:

委托是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。

下面这个委托及事件主要完成显示按钮名称和值的功能

     /// <summary>
    /// 自定义委托
    /// </summary>
    class SelfDelegate
    {
        /// <summary>
        /// 显示工具控件信息
        /// </summary>
        /// <param name="sender"></param>
        internal delegate void ToolInfo(object sender); //把委托看成是一种特殊的类,而事件就是委托类的一个实例
 
        /// <summary>
        /// 显示控件信息事件
        /// </summary>
        internal event SelfDelegate.ToolInfo ToolName;
 
        /// <summary>
        /// 事件触发机制
        /// </summary>
        /// <param name="sender"></param>
        internal void doEvent(object sender)
        {
            ToolName(sender);//事件名(方法签名)
        }
 
    }

在Form1部分类中的内容是:

        SelfDelegate sd = new SelfDelegate();
        /// <summary>
        /// this.button1.Click += new System.EventHandler(this.button1_Click);
        /// 为事件加上一个委托实例,这行是VS自动添加上去的
        /// this.button1就是我们刚刚添加的按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("按钮单击事件被触发");
 
            sd.ToolName += new SelfDelegate.ToolInfo(ShowToolName);
            sd.ToolName += new SelfDelegate.ToolInfo(ShowToolValue);
            sd.doEvent(sender); //将本对象源作为参数传递
        }
 
        #region 实现了委托方法签名的方法
        /// <summary>
        /// 显示控件名称
        /// </summary>
        /// <param name="sender"></param>
        private void ShowToolName(object sender)
        {
            Button btn = sender as Button;
            if (btn != null) //转换成功,失败为null,系统不会抛异常
            {
                MessageBox.Show(string.Format("控件名称:{0}", btn.Name));
            }
        }
 
        private void ShowToolValue(object sender)
        {
            Button btn = sender as Button;
            if (btn != null) //转换成功,失败为null,系统不会抛异常
            {
                MessageBox.Show(string.Format("控件值:{0}", btn.Text));
            }
        }
        #endregion
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载