Нет перегрузки для «INSERT_METHOD_HERE» совпадает «System» System.EventHandler '

StackOverflow https://stackoverflow.com/questions/3580666

Вопрос

Я пытаюсь построить программу, которая имеет кнопку, и каждый раз, когда нажата кнопка, она перемещает кнопку и добавляет к оценке. Однако я пытаюсь отключить ключ ввода или подавить команду при нажатии. Вот что у меня так далеко

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);

он должен работать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top