Никакая перегрузка для 'insert_method_here' не соответствует делегату 'System.EventHandler'
Я пытаюсь создать программу, в которой есть кнопка, и каждый раз, когда нажимается эта кнопка, она перемещает кнопку и увеличивает счет. Тем не менее, я пытаюсь отключить клавишу ввода или подавить команду при нажатии. Вот что у меня так далеко
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 ответа
Подпись вашего метода не совпадает EventHandler
делегат (то есть вы не можете просто добавить KeyEventArgs
аргумент и получить это работает). Вам нужно обработать более одного события, чтобы сделать то, что вы хотите (посмотрите на KeyDown
или же KeyPress
События).
В качестве альтернативы используйте MouseClick
событие вместо Click
событие.
Ну, я думаю, что проблема в вашем заявлении button1_click()
,
Обработчик события может иметь только подпись
delegate void EventHandler(Object sender, EventArgs e)
Итак, выньте клавишу Key из button1_click
и положить его в KeyPress
событие.
У меня была похожая проблема. Делегат EventHandler является шаблоном.
открытый делегат void EventHandler(отправитель объекта, TEventArgs e);
Так что если вы измените строку:
this.button1.Click + = new System.EventHandler (this.button1_Click);
чтобы:
this.button1.Click + = new System.EventHandler (this.button1_Click);
он должен работать.
EventHandle делегат, это два параметра, а не три. и ваш метод имеет три параметра, так что это неправильно.
см.: EventHandler делегировать информацию в 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'
}
делегат, метод должен иметь одинаковые параметры, одинаковый тип возвращаемого значения, иначе это будет исключение.