使用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'。 整数是在该论坛的构造函数中创建的。有解决方案来解决这个问题,还是有更好的方法来使用方法之间的整数
答案 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
}