再问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个参数,不过你可以实现自己的委托事件 并在必要时把自己的事件处理器,和事件绑定 这样你可以实现任意个参数,