没有“ Insert_method_here”匹配委托'system.eventhandler'的超载
-
01-10-2019 - |
题
我正在尝试构建一个具有按钮的程序,并且每次单击该按钮时,它都会移动按钮并添加得分。但是,我试图禁用Enter键,或在按下时抑制命令。这是我到目前为止的
private void button1_Click(object sender, EventArgs e, KeyEventArgs k)
{
if (k.KeyCode == Keys.Enter)
{
k.SuppressKeyPress = true;
}
score = score + 10;
timesClicked++;
int rand1 = RandomNumber(1, 400);
int rand2 = RandomNumber(1, 400);
button1.Location = new Point(rand1, rand2);
toolStripScore.Text = ("Your score is " + score);
toolStripClicks.Text = ("You've clicked the button{0} times " + timesClicked);
winCheck();
}
这是我添加的目的,以防止输入键进入。
if (k.KeyCode == Keys.Enter) { k.SuppressKeyPress = true; }
但是,它会生成错误...“'button1_click'匹配委托'system.eventhandler'的“没有过载”,然后单击以显示位置时,它将打开form1.designer的代码,并指向这一行。 “ this.button1.click += new System.EventHandler(this.button1_click);”
解决此问题的任何帮助将不胜感激。
解决方案
您的方法签名不匹配 EventHandler
委托(也就是说,您不能只是添加 KeyEventArgs
争论并实现此功能)。您需要处理多个事件来完成您想做的事情(看看 KeyDown
或者 KeyPress
事件)。
或者,使用 MouseClick
事件而不是 Click
事件。
其他提示
好吧,我认为问题在于您 button1_click()
.
活动处理程序只能具有
delegate void EventHandler(Object sender, EventArgs e)
因此,将钥匙按下 button1_click
, ,然后把它放在 KeyPress
事件。
EventHandle委托是两个参数,而不是三个参数。而且您的方法具有三个参数,所以这是错误的。
首先,您必须修改方法:
private void button1_Click(object sender, EventArgs e)
{
}
然后判断这样的方法中的类型:
KeyEventArgs k = null;
if(e is KeyEventArgs){
k = (KeyEventArgs) e;
//do sth here about pressing 'enter'
}
委托,方法必须具有相同的参数,相同的返回类型,否则将是例外。
我也有类似的问题。 EventHandler代表是一个模板。
公共代表void eventhandler(对象发送者,teventargs e);
因此,如果您更改行:
this.button1.click += new System.EventHandler(this.button1_click);
到:
this.button1.click += new System.EventHandler(this.button1_click);
它应该起作用。