'button'没有重载匹配委托'EventHandler';

时间:2017-04-07 11:56:34

标签: c# winforms

使用Windows论坛相当新,我遇到了在多种方法中使用intergers的问题,在搜索解决方案时我改变了方法

    private void button_click(object sender, EventArgs e)

到此

    public void button_click(object sender, EventArgs e, int attack1, int hp2)

这在此视图中工作正常,但Designer选项卡发出错误“没有重载'button_click'匹配委托'EventHandler'。 整数是在该论坛的构造函数中创建的。有解决方案来解决这个问题,还是有更好的方法来使用方法之间的整数

1 个答案:

答案 0 :(得分:0)

事件处理程序应与委托的签名完全匹配 - 即参数的类型和计数以及返回值的类型应与为事件委托定义的相同。 ButtonClick事件的类型为EventHandler委托。该委托定义为

public delegate void EventHandler(object sender, EventArgs e)

您附加到活动的处理程序应具有完全相同的签名 - void (object, EventArgs)

即使可以使用具有不同签名的处理程序,您也忘记了Button实例引发的事件。按钮如何知道为其他方法参数提供哪个值?它对攻击和hp一无所知。而且你不能修改按钮类实现来为你传递一些额外的参数。

如果要在事件处理程序中使用一些其他值,则应将这些值存储为表单字段:

public class Form1 : Form
{
   private int attack;
   private int hp;

   public Form1()
   {
       // initialize attack and hp here
   }

   private void button_click(object sender, EventArgs e)
   {
       // attack and hp avalilable here
   }
}

或者您可以在按钮的Tag属性中存储一些信息,并从事件的发件人中检索该信息:

   private void button_click(object sender, EventArgs e)
   {
       var button = (Button)sender;
       // use button.Tag
   }