(1) sender表示触发事件的对象,比如当button1和button2的Click都关联给同一个事件处理函数的时候,可以通过sender区分点击了哪一个按钮。这在设计计算器这种程序的时候很有用,你只要为数字0~9的9个按钮编写一个函数就可以了。
(2) e表示参数,对于Click,它没什么用,但是另外一些事件就有用了,比如MouseMove事件,它当中有鼠标的当前位置;比如KeyPress,它包括了按了哪个键;比如FormClosing,它还可以传出参数,以决定是否要取消关闭窗口。
(3) => 表示Lambda表达式,它前面的括号相当于函数参数,后面的{}相当于一个函数体。
(2) e表示参数,对于Click,它没什么用,但是另外一些事件就有用了,比如MouseMove事件,它当中有鼠标的当前位置;比如KeyPress,它包括了按了哪个键;比如FormClosing,它还可以传出参数,以决定是否要取消关闭窗口。
(3) => 表示Lambda表达式,它前面的括号相当于函数参数,后面的{}相当于一个函数体。
e 代表事件的参数,具体事件的参数是不一样的。
可以理解成 使用指定的委托执行指定的方法吧。PS:个人观点,不喜勿喷。
http://pwcrab.blog.163.com/blog/static/1699038222010567125810/
这里的 MouseButtonEventArgs 跟其它地方的 EventHandler 之类类型的参数放在同一个地方,这就是为了保证看上去一样。假设人家在 sender 之后、e之前定义一个别的参数,行不行?语法上完全可以。但是你使用这个事件时,就会感觉不再是跟其它事件类似的模式了。所以你觉得“几乎所有的事件都是(sener, eventhandler)”,这其实只是感觉,其实并没有制度(程序)保证。但是基本上微软的控件的所有事件都按这个模式手工定义的,而已。至于说起名字叫做sender、e,也一样是手工模式而已。如果人家不叫做sender,而叫做ctrol;或者参数不叫做e,而叫做arg,也完全可以。但是微软的控件基本上是“人治”地这样去保持一致性,没有任何语法上强迫这样去定义,但是人家在语义上保证了上万、上十万个定义中也是起相同的名字,让你容易联想和试用。