2

ボタンのあるプログラムを作成しようとしていますが、そのボタンがクリックされるたびに、ボタンが移動してスコアに追加されます。ただし、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'に一致しません」そしてクリックして場所を表示すると、Form1.Designerのコードが開き、この行を指します。"this.button1.Click + = new System.EventHandler(this.button1_Click);"

この問題を解決するための助けをいただければ幸いです。

4

4 に答える 4

7

メソッドのシグネチャがデリゲートと一致しませんEventHandler(つまり、KeyEventArgs引数を追加してこれを機能させることはできません)。やりたいこと(KeyDownまたはKeyPressイベントを見る)を行うには、複数のイベントを処理する必要があります。

MouseClickまたは、イベントの代わりにイベントを使用しますClick

于 2010-08-27T01:24:29.650 に答える
2

さて、問題はあなたのデクレレーションにあると思いますbutton1_click()

イベントハンドラは、の署名のみを持つことができます

delegate void EventHandler(Object sender, EventArgs e)

だから、キープレスを取り出して、イベントbutton1_clickに入れてください。KeyPress

于 2010-08-27T01:27:51.063 に答える
0

EventHandleデリゲートは、3つではなく、2つのパラメーターです。メソッドには3つのパラメーターがあるため、間違っています。

参照:msdnのEventHandlerデリゲート情報

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

private void button1_Click(object sender, EventArgs e)
{
}

次に、次のような方法でタイプを判断します。

KeyEventArgs k = null;
if(e is KeyEventArgs){
    k = (KeyEventArgs) e;
    //do sth here about pressing 'enter'
}

デリゲート、メソッドは同じパラメータ、同じリターンタイプである必要があります。そうでない場合、例外になります。

于 2010-08-27T01:29:23.030 に答える
0

私も同様の問題を抱えていました。EventHandlerデリゲートはテンプレートです。

パブリックデリゲートvoidEventHandler(オブジェクト送信者、TEventArgs e);

したがって、行を変更すると、次のようになります。

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

に:

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

動作するはずです。

于 2011-07-08T02:53:57.873 に答える