raindust

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
[注]节选自http://blog.csdn.net/masterft/archive/2007/07/20/1700474.aspx

using System;
using System.Collections.Generic;

public class MyClass
{
    
public static void Main()
    {        
        MyClass mc 
= new MyClass();
        myButton godBtn 
= new myButton();
        godBtn.myClick 
+= new EventHandler(mc.godBtnClick);
        godBtn.OnmyClick();
        
        Console.ReadLine();    
    }        
    
public void godBtnClick(object sender,EventArgs e)
    {
        Console.WriteLine(
"on my godbutton");
    }
}

public class myButton 
{
    
public event EventHandler myClick; //一个委托事件 myClick
    protected void OnmyClick() //注意,最好使用protected修饰符,以便只给继承它的类使用
    {
        
if(myClick != null)
        {
            myClick(
this,new EventArgs());
        }
    }
}

ps:这里的myClick 并没有具体的操作,具体实现委托给godBtnClick,但是具体响应还是由myButton 中的myClick 实现,这便是事件的奥秘
 

定义实现一个事件的流程

1、引发事件的对象称事件源;

2、事件总是委托类型的,这个委托类型的签名定义了处理该事件的方法的签名;(如myClick)

3、定义事件处理程序方法的对象称事件接收方(就是主程序此例为MyClass);

4、事件接收方提供的事件处理方法必须与该事件预订的方法签名一致. (如godBtnClick)

5、在事件的通信中,事件发送者不知道哪个对象或方法将要去接收/发送事件,因而在事件源和事件接收者之间就需要一个中间人-委托;

6、当指派多个处理程序给一个事件的时候,处理程序的调用次序是没有保证的.(多播委托)

7、EventHandler 是一个用于事件的委托,它有两个参数object和EventArg,object代表了事件的发送者,EventArg对象代表了事件包含的数据;

8、所以有事件处理方法都可以使用EventHandler,但你也可以使用 EventHandler的子类.(如public event PaintEventHandler Paint; 其实PaintEventHandler 是EventHandler的子类)

 

1)定义事件(变量) public event EventHandler myClick;

2)定义事件方法 public static void godBtnClick(object sender, EventArgs e);

3)将事件与事件方法相关联 mc.myClick+= new EventHandler(godBtnClick); //EventHandler是一个委托,委托通常把方法当参数传递,btnGetClick是一个方法

4)定义响应函数 publicvoid OnmyClick()

5)调用响应函数,响应函数调用触发函数,事件被触发了 mc.OnmyClick();

 注:在系统定义的响应事件中,第4) 5)步是不可见的.

posted on 2007-08-16 09:36  ymz  阅读(330)  评论(0编辑  收藏  举报