liujf

Miracles sometimes occur, but one has to work terribly for them.

事件

设计一个可统计单击次数的按钮,它提供一个自定义的MyClick事件

一、使用自定义事件的委托

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 事件练习
{
    /// <summary>
    /// 自定义按钮可以实现记录点击的次数
    /// </summary>
    public  class MyCustomButton:Button
    {
        /// <summary>
        /// 自定义事件的委托
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public delegate void MyClickDelegate(object sender, MyClickEventArgs e);
        /// <summary>
        /// 自定义事件
        /// </summary>
        public event MyClickDelegate MyClick;
        int clickCount = 0;
        protected   override void OnClick(EventArgs e)
        {
            clickCount++;
            if (MyClick != null)
            {
                //激发MyClick事件
                MyClick(this, new MyClickEventArgs(clickCount));
            }
        }
    }


    /// <summary>
    /// 定义MyClick事件参数
    /// </summary>
    public class MyClickEventArgs : EventArgs
    {
        /// <summary>
        /// 点击次数
        /// </summary>
        public int clickCount = 0;
        public MyClickEventArgs(int clickCountValue)
        {
            this.clickCount = clickCountValue;
        }
    }
}
二、使用泛型事件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 事件练习
{
    /* 一、泛型委托的定义如下:
    [SerializableAttribute]
    public delegate void EventHandler<TEventArgs>(
    Object sender,
    TEventArgse
    ) where TEventArgs: EventArgs
    */
    /*二、使用EventHandler<>的好处是:
    1.只需定义好事件参数类(从EventArgs类派生)
    2.不再需要定义独立的事件委托.
    */
    /// <summary>
    /// 自定义按钮可以记录点击次数(使用了泛型委托)
    /// </summary>
    public class MyCustomButtonUseGenericscDelegate:Button
    {
        /// <summary>
        /// 使用泛型事件可以简化自定义事件
        /// </summary>
        public event EventHandler<MyClickEventArgs> MyClick;
        int clickCount = 0;
        protected override void OnClick(EventArgs  e)
        {
            clickCount++;
            if (MyClick != null)
            {
                MyClick(this, new MyClickEventArgs(clickCount));
            }
        }
    }
}
三、前台注册事件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 事件练习
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //挂载事件
            myCustomButton1.MyClick += new MyCustomButton.MyClickDelegate(myCustomButton1_MyClick);
            myCustomButtonUseGenericscDelegate1.MyClick += new EventHandler<MyClickEventArgs>(myCustomButtonUseGenericscDelegate1_MyClick);
        }

        void myCustomButtonUseGenericscDelegate1_MyClick(object sender, MyClickEventArgs e)
        {
            MessageBox.Show(string.Format("点击了{0}次按钮.", e.clickCount));
        }

        void myCustomButton1_MyClick(object sender, MyClickEventArgs e)
        {
            MessageBox.Show(string.Format("点击了{0}次按钮.", e.clickCount));
        }
    }
}
源代码下载:点击打开链接


阅读更多
文章标签: object class button null
个人分类: C#基础知识
上一篇委托和匿名方法的使用
下一篇宣告式动画
想对作者说点什么? 我来说一句

事件与概率事件与概率

2008年12月30日 161KB 下载

事件与概率事件与概率事件

2008年12月30日 781KB 下载

flex事件flex事件flex事件flex事件

2011年04月16日 147KB 下载

JavaScript常用事件

2010年08月16日 20KB 下载

java事件 焦点事件 实例代码

2011年04月02日 699B 下载

java事件 选项事件 实例代码

2011年04月02日 332KB 下载

android的 view

2011年07月29日 66KB 下载

没有更多推荐了,返回首页

关闭
关闭