C#事件中的两个参数(object sender,EventArgs e)

  • C#窗体程序有很多的事件,比如按钮点击事件,双击事件,Form_Load事件,这些事件的实现里都有两个参数(object sender,EventArgs e),什么意思呢?
  • 我们新建一个窗体程序,双击产生Load事件。C#事件中的两个参数(object sender,EventArgs e)_第1张图片
    C#事件中的两个参数(object sender,EventArgs e)_第2张图片
  • 我们可以看到,Form1_Load(object sender, EventArgs e)本质就是一个有两个参数的函数。那么函数怎么能够自己调用自己呢?不能。它肯定在某个地方被调用了。
  • 在Form1_Load上鼠标右键点击查看所有引用,如下:
    在这里插入图片描述
    然后点击这个查到的内容,转到它的调用出:
    C#事件中的两个参数(object sender,EventArgs e)_第3张图片
  • 原来Form1_Load()是在Form1.desinger下面的InitializeComponent()函数里调用的。InitializeComponent()这个函数是在主界面Form类的构造函数里调用的。
    C#事件中的两个参数(object sender,EventArgs e)_第4张图片
  • 我们也知道,在主程序运行的时候,会自动执行Form1类下面的构造函数,进而调用InitializeComponent()函数,InitializeComponent()函数通过里面的Load事件调用From1_Load()函数:
this.Load += new System.EventHandler(this.Form1_Load); 

而这个调用,其实是Load事件调用了Form1_Load()函数。
而System.EventHandler是委托,通过new委托的方式调用事件要触发的函数。
鼠标放到EventHandler上转到这个委托的定义里去:
C#事件中的两个参数(object sender,EventArgs e)_第5张图片
我们可以看到原来是Load事件所在的委托,在定义的时候就有这两个参数(object sender, EventAgrs e),那么可以知道,Form1_Load(object sender, EventAgrs e)函数是被Load事件调用的,所以要和委托EventHandler的参数保持一致。

综上,这两个参数从形式上看,只是为了和EventHandler委托的参数保持一致。


事件通过委托调用的函数,必须和委托的参数保持一致。

你可能感兴趣的:(#,C#,c#)