我正在尝试构建一个包含按钮的程序,每次单击该按钮时,它会移动按钮并添加到分数中。但是,我试图禁用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);”
非常感谢任何有关解决此问题的帮助。
答案 0 :(得分:7)
您的方法签名与EventHandler
委托不匹配(也就是说,您不能只添加KeyEventArgs
参数并使其正常工作)。您需要处理多个事件才能执行所需操作(查看KeyDown
或KeyPress
个事件。)
或者,使用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);
它应该有用。