'insert_method_here'没有重载匹配委托'System.EventHandler'

时间:2010-08-27 01:11:25

标签: c# error-handling suppression keyeventargs

我正在尝试构建一个包含按钮的程序,每次单击该按钮时,它会移动按钮并添加到分数中。但是,我试图禁用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);”

非常感谢任何有关解决此问题的帮助。

4 个答案:

答案 0 :(得分:7)

您的方法签名与EventHandler委托不匹配(也就是说,您不能只添加KeyEventArgs参数并使其正常工作)。您需要处理多个事件才能执行所需操作(查看KeyDownKeyPress个事件。)

或者,使用MouseClick事件代替Click事件。

答案 1 :(得分:1)

嗯,我认为问题在于button1_click()的贬值。

事件处理程序只能具有

的签名
delegate void EventHandler(Object sender, EventArgs e)

所以,从button1_click开始按键,然后将其置于KeyPress事件中。

答案 2 :(得分:0)

EventHandle委托,是两个参数,而不是三个。 并且你的方法有三个参数,所以这是错误的。

见:EventHandler delegate information in msdn

首先,你必须修改你的方法:

private void button1_Click(object sender, EventArgs e)
{
}

然后判断方法中的类型如下:

KeyEventArgs k = null;
if(e is KeyEventArgs){
    k = (KeyEventArgs) e;
    //do sth here about pressing 'enter'
}

委托,方法必须具有相同的参数,相同的返回类型,否则它将是异常。

答案 3 :(得分:0)

我有类似的问题。 EventHandler委托是一个模板。

public delegate void EventHandler(object sender,TEventArgs e);

所以如果你换行:

  

this.button1.Click + = new System.EventHandler(this.button1_Click);

为:

  

this.button1.Click + = new System.EventHandler(this.button1_Click);

它应该有用。