日期:2014-05-19  浏览次数:20704 次

事件的相关问题 高手请进

  private   void   Form1_Load(object   sender,   System.EventArgs   e)
{//相关处理语句
}
这是个form1窗体发生load事件时,将执行里面的代码。这一点没有问题。
但是,
问题1:System.EventArgs   e   应该是表示参数e   是   EventArgs类的一个实例吧   ,可我查EventArgs类,除了构造函数   就是一些方法,其成员中只有一个Empty字段,表示没有事件数据的事件,理解不了。那么实际程序在运行时,传递的参数到底是什么呢?

问题2:因为这是默认的事件,想必这种写法是固定的标准形式。那么Form1_Load本身表示的是事件类呢,还是一个委托实例?还是仅仅是个过程?
问题3   :默认的标准事件及其说明   在哪能查的到呢?
问题4:对于不管是默认的事件   还是自定义的事件,靠什么判断这个事件发生了呢?默认的好像好一些   只要发生   ,系统肯定能知道。但是如果是我自定义的事件呢?怎么通知程序   然后执行我为自定义事件写的过程呢?


------解决方案--------------------
问题1: 事件参数是事件定义一个标准,如果没有参数,就是默认为一个EventArgs的实例,没有任何可用的有用信息,只有事件确实有参数要传给事件处理方法时才会在这个e里出现可用的信息,比如窗体的关闭事件有一个e.Cancel参数,因为通过这个参数才系统才能知道是否用户要取消关闭这个事情.

问题2:Form1_Load只是表示是一个过程,这个过程是由事件的引发者调用的.

问题3:默认的事件一般都会在微软的MSDN文档中有详细的说明,输入事件名称在索引中就可以找到相应的说明.比如Load事件.

问题4:事件发生了就一定会调用它的处理方法,也就是那个事件的处理过程一有调用就说明事件发生了.就是这样的.如果是自定义的事件要引发,其实在C#里很像是对一个方法的调用,就像如下是一般的引发事件的做法:

public event EventHandler someEvent;//定义一个事件

if (someEvent!=null)//如果事件被用户注册了
{
someEvent(this, new EventArgs());//引发事件并传递其应有的事件参数,这里是默认.
}