创建事件(event)

来源:互联网 发布:工商银行软件中心待遇 编辑:程序博客网 时间:2024/06/07 04:44

事件(event):

让我通过一个例子来模拟事件的整个过程:

  1. 创建一个button类,它里面有一个click 事件。
  2. 创建一个Form类,他里面有一个我们上面定义的button类。
  3. 要求:当我们用户单击button类的时候From类要对他进行处理,输出一条信息“我知道你被单击了”

请看下图:


首先我们会单击button,然后button会通知Form,然后From就作出相应。这个过程在C#里面应该怎么做到呢?

下面我会列出上述例子的源代码(这里就不介绍怎么声明event等等内容了):

using System;
using System.Collections.Generic;
using System.Text;

namespace UsingEvent
{
   
public delegate voidClickEventHandler(object sender, EventArgs e);//声明一个代表:请看文章最后面Note

    public classMyButton             //创建MyBottom
    {
       
public event ClickEventHandler ClickEvent;//声明一个事件

        public voidClick()                                //单击MyButton
        {
            if (
ClickEvent != null)  //myButton.ClickEvent += newClickEventHandler(OnClickEvent);   时成立
            {
               Console.WriteLine("MyButton:
我被单击了");
               ClickEvent(this,null);                         //
抛出事件,给所有相应者
            }
        }
    }

    public class MyForm
    {
        public MyButton myButton = newMyButton();

        public MyForm()
        {

            //添加事件到myButton中,当myButton被单击的时候就会调用相应的处理函数

           
myButton.ClickEvent += new ClickEventHandler(OnClickEvent);   

         }

       //事件处理函数

       void OnClickEvent(object sender, EventArgs e)
        {
           Console.WriteLine("MyForm:
我知道你被单击了!");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyForm form= new MyForm();//
生成一个MyForm

           form.myButton.Click();//单击MyForm中的鼠标,效果就出来了
        }
    }
}
 

Notepublic delegate void ClickEventHandler(object sender, EventArgs e);这是事件委托标准的声明方法,其实在参数里面我们可以不传,也可以是其他类型的。但是最好还是使用上面的声明方法,你可以继承EventArgs,来包装你要传送的其他任何参数。


/////////////////////////////////////////////////////////////////////////////

分享至:http://www.cnblogs.com/scottckt/archive/2010/09/29/1838598.html

谢谢原作者

例2:说明EventArgs传参数的方法:

//打印对象
        public class CustomPrint
        {
            
/// <summary>
            
/// 1、定义事件参数
            
/// </summary>
            public class CustomPrintArgument : EventArgs
            {
                
private int copies;
                
public CustomPrintArgument(int numberOfCopies)
                {
                    
this.copies = numberOfCopies;
                }
                
public int Copies
                {
                    
get { return this.copies; }
                }
            }

            
/// <summary>
            
/// 2、声明事件的委托
            
/// </summary>
            
/// <param name="sender"></param>
            
/// <param name="e"></param>
            public delegate void CustomPrintHandler(object sender, CustomPrintArgument e);

            
/// <summary>
            
/// 3、声明事件
            
/// </summary>
            public event CustomPrintHandler CustomPrintEvent;

            
/// <summary>
            
/// 4、定义触发事件
            
/// </summary>
            
/// <param name="copyies">份数</param>
            public void RaisePrint(int copyies)
            {
                CustomPrintArgument e = 
new CustomPrintArgument(copyies);
                CustomPrintEvent(
this, e);
            }
        }
        
/// <summary>
        
/// WinForm 构造函数
        
/// </summary>
        public Form1()
        {
            InitializeComponent();

            PrintCustom();
        }

        
/// <summary>
        
/// 打印方法
        
/// </summary>
        private void PrintCustom()
        {
            
//实例对象
            CustomPrint cp = new CustomPrint();

            
//添加事件
            cp.CustomPrintEvent += new CustomPrint.CustomPrintHandler(cp_CustomPrintEvent);

            
//5、触发事件
            cp.RaisePrint(10);

        }

        
//6、事件处理
        void cp_CustomPrintEvent(object sender, CustomPrint.CustomPrintArgument e)
        {
            
int copies = e.Copies;
            MessageBox.Show(copies.ToString());
        }
    }


原创粉丝点击