「insert_method_here」のオーバーロードはデリゲート 'system.eventhandler'の過負荷はありません

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

質問

ボタンを持つプログラムを構築しようとしています。ボタンをクリックするたびに、ボタンを移動してスコアに追加します。ただし、Enterキーを無効にしたり、押されたときにコマンドを抑制しようとしています。これが私がこれまでに持っているものです

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

これは、Enterキーが入るのを防ぐために追加したものです。

if (k.KeyCode == Keys.Enter) { k.SuppressKeyPress = true; }

ただし、エラーが生成されます...「button1_click 'system.eventhandler」の「button1_click」のオーバーロードはありません。クリックして場所を表示すると、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, 、そしてそれをaに入れます KeyPress イベント。

EventHandle Delegateは、3つではなく2つのパラメーターです。そして、あなたの方法には3つのパラメーターがあるので、それは間違っています。

見る:MSDNのEventHandler Delegate情報

まず、メソッドを変更する必要があります。

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 Delegateはテンプレートです。

public Delegate void eventhandler(Object Sender、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