您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> .NET >> net中事件中的sender对象为什么是事件源对象呢?

net中事件中的sender对象为什么是事件源对象呢?

来源:网络整理     时间:2016/5/13 3:02:31     关键词:send,为什么

关于网友提出的“net中事件中的sender对象为什么是事件源对象呢?”问题疑问,本网通过在网上对“net中事件中的sender对象为什么是事件源对象呢?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题:net中事件中的sender对象为什么是事件源对象呢?
描述:

事件中的sender对象为什么说是事件源对象呢?

事件的本质是委托,委托只是自定义的一种类型,系统的委托是这么定义的:public delegate void EventHandler(object sender, EventArgs e)

为啥就说sender是事件源了。

看我写的代码:

 1privatevoid button1_Click(object sender, EventArgs e)
2 {
3 Button b = (Button)sender;
4 b.Click += new EventHandler(my_click_method);
5 }
6
7publicvoid my_click_method(object sender, EventArgs e)
8 {
9 MessageBox.Show("显示消息");
10 }

上面的代码中:为什么将上面的sender转换成Button类型,就会得到“当前”点击的Button对象了,这是怎么一回事啊?微软是怎么得到这个事件源对象sender的呢??想不通啊!

求救!!!


解决方案1:

说明你对委托/事件没有充分理解。Button类大概看起来是这样的(省略了一些不相关的东西)

class Button
{
publicevent EventHandler OnClick;
publicvoid Click()
{
if (OnClick != null) OnClick(this, null);
//处理Click事件 }
}

首先是为什么需要这个OnClick事件:Button类已经封装了Click方法,你无法去修改它的内容,也就是说点了Button之后的行为,是写死在Click方法里不能修改的。这样的话就会很不方便(比如我希望点了Button它就变色或者其他效果)。OnClick事件就是为了这种情况设计的。你注册了OnClick事件之后,当Button的Click方法被执行时,会发现你注册了OnClick事件(也就是说你希望点击Button时能执行一些“你自己的代码”)。这时就会先执行OnClick委托,同时传入了两个参数,一个是this(这里是Button类的实例),因此你在委托里能够把第一个参数sender转换成Button对象。第二个参数就是EventArgs,这里我随便传了个null,实际中你应该传入一些跟当前点击事件相关的数据,比如点击的位置等。

解决方案2:

这个是.NET的一个编码规范,为了统一编码风格。
也就说sender参数是 事件调用那个方法的时候会把当前控件对象传给这个参数

解决方案3:

这种object sender, EventArgs e格式是。net给你封装的一种格式,当然你可以不采用这种格式。

解决方案4:

所谓事件源,就是触发这个事件的对象。在内部需要定义委托和事件,定义委托时包括参数,比如EventHandler接收两个参数,一个是sender,一个是e,在内部要抛出这个事件时,需要调用方法抛出事件,这时也要传递两个参数,一个就是触发这个事件的button,另一个就是EventArgs。上层捕获到事件后,通过强制类型转换即可得到相应的那个触发事件的对象了。


以上介绍了“net中事件中的sender对象为什么是事件源对象呢?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1041655.html

相关图片

相关文章