0

Form.Designer.cs のボタン クリックの標準コードは次のとおりです。

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

標準コードは次の形式です。

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

Form.Designer.cs から Form に変数を渡す方法は何ですか? 書くことは可能ですか:

private void button_Click(object sender, EventArgs e, int variable)
        {
        }

フォームデザイナーで書いてみた

this.button1.Click += new System.EventHandler(this.button_Click(,,1);

しかし、オブジェクトの送信者と EventArgs e を宣言するように求められましたが、どちらも何を入力すればよいかわかりませんでした。

4

2 に答える 2

0

別のメソッドを追加し、その中で実装を行う最も簡単な方法です。たとえば、イベント ハンドラに次のメソッドを追加します。

private void button_Click(object sender, EventArgs e)
{

}

次に、イベント ハンドラーをアタッチします。

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

次に、渡したいパラメーターを取る別のメソッドを追加します。

private void button_ClickImpl(object sender, EventArgs e, int variable)
{

}

次に、button_Clickイベント内で引数を渡してこのメ​​ソッドを呼び出すことができます。次に例を示します。

 private void button_Click(object sender, EventArgs e)
 {
     button_ClickImpl(sender, e, 2323);
 }
于 2014-02-15T23:18:21.540 に答える
0

標準コントロールのイベント ハンドラーのシグネチャは、NET Framework プログラマーが確立したものから変更することはできません。
ボタン クリック イベント (標準コントロールの他のすべてのイベント ハンドラーも同様) は常に 2 つのパラメーターを受け取ります。イベントを処理するために必要です。

それを変更することはできません。あなたではなく、そのイベント ハンドラーを呼び出すフレームワーク コードであることに注意してください。フレームワークは、追加の変数を渡してそのコードをオンザフライで変更してリクエストに適応させたいと考えていることをどうやって知ることができるでしょうか?

複数のボタン間で同じイベント ハンドラーを共有する場合、クリックされたボタンを認識する方法は多数あります。

まず、最もクリーンな方法です。すべてのボタンに名前があります

private void button_Click(object sender, EventArgs e)
{
    // I assume that only buttons are assigned to this event
    Button btn = sender as Button;
    if(btn.Name == "button1")
       ,,,,
    else
       ...
}

別の方法は、Tagプロパティを介してです。フォーム デザイナまたはコードを使用して、このプロパティを必要な値に設定します。コードを使用して、Tag プロパティを文字列よりも複雑なものに設定することもできます

...
MyClass c = new MyClass();
button1.Tag = c;
....

private void button_Click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    MyClass t = btn.Tag as MyClass
    if(t != null) 
       ......
}
于 2014-02-15T23:10:35.820 に答える