2

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

4 回答 4

7

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

或者,使用MouseClick事件而不是Click事件。

于 2010-08-27T01:24:29.650 回答
2

好吧,我认为问题在于您对button1_click().

事件处理程序只能具有签名

delegate void EventHandler(Object sender, EventArgs e)

因此,将 Key press 从 中取出button1_click,并将其放入KeyPress事件中。

于 2010-08-27T01:27:51.063 回答
0

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

参见:msdn 中的 EventHandler 委托信息

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

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

然后像这样判断方法中的类型:

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

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

于 2010-08-27T01:29:23.030 回答
0

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

公共委托 void EventHandler(object sender, TEventArgs e);

因此,如果您更改该行:

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

至:

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

它应该工作。

于 2011-07-08T02:53:57.873 回答