「insert_method_here」のオーバーロードはデリゲート 'system.eventhandler'の過負荷はありません
-
01-10-2019 - |
質問
ボタンを持つプログラムを構築しようとしています。ボタンをクリックするたびに、ボタンを移動してスコアに追加します。ただし、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);
それは機能するはずです。