Никакая перегрузка для 'insert_method_here' не соответствует делегату 'System.EventHandler' - PullRequest
2 голосов
/ 27 августа 2010

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

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 ]

7 голосов
/ 27 августа 2010

Ваша подпись метода не соответствует EventHandler делегату (то есть вы не можете просто добавить KeyEventArgs аргумент и заставить это работать). Вам нужно обработать более одного события, чтобы делать то, что вы хотите (посмотрите на KeyDown или KeyPress события).

Либо используйте событие MouseClick вместо события Click.

1 голос
/ 27 августа 2010

Ну, я думаю, что проблема в вашем объявлении button1_click().

Обработчик событий может иметь только подпись

delegate void EventHandler(Object sender, EventArgs e)

Итак, выньте клавишу Key из button1_click и поместите ее в событие KeyPress.

0 голосов
/ 08 июля 2011

У меня была похожая проблема. Делегат EventHandler является шаблоном.

открытый делегат void EventHandler (отправитель объекта, TEventArgs e);

Итак, если вы измените строку:

this.button1.Click + = new System.EventHandler (this.button1_Click);

до:

this.button1.Click + = new System.EventHandler (this.button1_Click);

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

0 голосов
/ 27 августа 2010

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'
}

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

...