Никакая перегрузка для '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'
}

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

Другие вопросы по тегам