我正在尝试构建一个具有按钮的程序,并且每次单击该按钮时,它都会移动按钮并添加得分。但是,我试图禁用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委托是两个参数,而不是三个参数。而且您的方法具有三个参数,所以这是错误的。

看: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'
}

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

我也有类似的问题。 EventHandler代表是一个模板。

公共代表void eventhandler(对象发送者,teventargs e);

因此,如果您更改行:

this.button1.click += new System.EventHandler(this.button1_click);

到:

this.button1.click += new System.EventHandler(this.button1_click);

它应该起作用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top