Нет перегрузки для «INSERT_METHOD_HERE» совпадает «System» System.EventHandler '
-
01-10-2019 - |
Вопрос
Я пытаюсь построить программу, которая имеет кнопку, и каждый раз, когда нажата кнопка, она перемещает кнопку и добавляет к оценке. Однако я пытаюсь отключить ключ ввода или подавить команду при нажатии. Вот что у меня так далеко
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, это два параметра, а не три. И ваш метод имеет три параметра, поэтому это неправильно.
видеть: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'
}
Делегат, метод должен иметь те же параметры, тот же тип возврата, или это будет исключение.
У меня была похожая проблема. Делегат EventHandler - это шаблон.
Общественный делегат пустоты eventhandler (объект отправителя, teventargs e);
Так что, если вы измените строку:
this.button1.click + = new system.eventhandler (this.button1_click);
к:
this.button1.click + = new system.eventhandler (this.button1_click);
он должен работать.