日期:2014-05-20  浏览次数:21074 次

再问C# 委托 和调用事件
NO.1   委托情况!我想在系统给的函数里加个参数
private   void   button1_Click(object   sender,   EventArgs   e,Button   bt)
{}
?怎么改?
NO.2   调用事件!我想直接调用系统给的函数如:    
private   void   button1_Click(object   sender,   EventArgs   e)
{}
怎样调用?可以放在其他函数里面用吗?

------解决方案--------------------
第二个 button1_Click(new object(),new EventArgs());
第一个 try override
------解决方案--------------------
事件里的参数最好是(object sender, EventArgs e),
这个是标准,如果需要在事件里添加自定义的其它参数,可能要重新定义一个事件.可以考虑从EventArgs继承一个新的参数类,然后给这个类添加属性等来达到要求.但需要自已来定义触发新的事件,并把新的事件参数做为引发事件的参数.

如果要调用事件函数可以直接调用函数,如:
this.button1_Click(null, null);都用null,是因为没有合适的参数,如果需要这两个参数有意义,那么可以由实际情况传入.
------解决方案--------------------
应该从 EventArgs继承

private void button1_Click(object sender, MyEventArgs e);

sender和EventArgs是对应窗口消息的发送者和消息参数的。因此这些event被称为标准事件。它的触发通常被底层Control封装
------解决方案--------------------
学习
------解决方案--------------------
不从EventArgs继承也可以 随便传递一个参数都能行的
EventArgs继承只是为了统一 一个约定而已 不是语言规范
------解决方案--------------------
两个参数,够了吧?加什么参数?
第一个参数是事件源对象,如果这个被用了,那么就写个EventArgs的子类,给他加个属性,把你另外要传的对象给相关属性不就行了,在事件里在向下转换就行了
------解决方案--------------------
改方法 改签名!
------解决方案--------------------
学习。。
------解决方案--------------------
学习
------解决方案--------------------
private void button1_Click(object sender, EventArgs e,Button bt)作用是想得到那个button被点击了是吧?
一般情况下button1_Click(object sender, EventArgs e)的sender就是触发点击事件的那个button,用sender as Button就可以了。
自己定义EventArgs的时候要符合实际逻辑,比如Click事件是不包含任何信息的,因为它只代表了某个控件被点击,没有额外的信息。而MouseClick就可以包含是哪个鼠标键点击的信息。一般情况下,只要设计合理,不需要再加额外的参数了。
------解决方案--------------------
如果你想用系统的事件那必须提供那2个参数,不过你可以实现自己的委托事件 并在必要时把自己的事件处理器,和事件绑定 这样你可以实现任意个参数,