web-dev-qa-db-ja.com

複数のボタンを同じイベントハンドラーにサブスクライブし、クリックされたボタンに応じて動作するにはどうすればよいですか?

同じハンドラにアタッチしたい6つのボタンがあります。これどうやってするの?

25
delete

ボタンのイベントをサブスクライブする場合、それは単なる標準のイベントハンドラです。

button1.Click += myEventHandler;

同じコードを使用して、すべてのボタンのハンドラーを追加できます。

button1.Click += myEventHandler;
button2.Click += myEventHandler;
button3.Click += myEventHandler;
button4.Click += myEventHandler;
button5.Click += myEventHandler;
button6.Click += myEventHandler;

これにより、いずれかのボタンがクリックされたときにmyEventHandler内のハンドラーが実行されます。

25
Reed Copsey

同じメソッドを各ボタンのクリックイベントにバインドすることにより、同じイベントを複数のボタンにアタッチできます。

myButton1.Click += new MyButtonClick;
myButton2.Click += new MyButtonClick;
myButton3.Click += new MyButtonClick;
myButton4.Click += new MyButtonClick;
myButton5.Click += new MyButtonClick;
myButton6.Click += new MyButtonClick;

void MyButtonClick(object sender, EventArgs e)
{
    Button button = sender as Button;
    //here you can check which button was clicked by the sender
}
38
hunter

ボタンを同じイベントに配線するだけです:

myButton1.Click += Button_Click;
myButton2.Click += Button_Click;
myButton3.Click += Button_Click;
...

それに応じてボタンを処理します。

private void Button_Click(object sender, EventArgs e)
{
    string buttonText = ((Button)sender).Text;

    switch (buttonText)
    {
        ...
    }
}

senderオブジェクトには、Clickイベントを発生させたボタンへの参照が含まれています。 Buttonにキャストバックして、実際のボタンを区別するために必要なプロパティにアクセスできます。

13
Igal Tabachnik

どのボタンが押されたかを確認する方法:

sender

Button myButton = (Button)sender;

senderは、イベントハンドラーのタイプobjectのパラメーターです。

4
AlexanderMP

デザイナーでイベントをダブルクリックする代わりに、イベントハンドラーの名前をデザイナーのプロパティグリッドのイベントに貼り付けることができます。

4
Itay Karo
myButton1.Click += new EventHandler(MyButtonClick);
myButton2.Click += new EventHandler(MyButtonClick);
myButton3.Click += new EventHandler(MyButtonClick);
myButton4.Click += new EventHandler(MyButtonClick);
myButton5.Click += new EventHandler(MyButtonClick);
myButton6.Click += new EventHandler(MyButtonClick);

public void MyButtonClick(object sender, MouseButtonEventArgs e)
{
                switch ((sender as Button).Name)
                {
                case "button1":
                    //actions
                    break;
                case "button2":
                    //actions
                    break;
                default:
                    break;
               }
}
2
Tokk

私は専門家ではありませんが、私はこれを使用し、それはかなりシンプルに見えます

<Button x:Name="Button1" Content="Button" Click="Button_Click"/>
<Button x:Name="Button2" Content="Button" Click="Button_Click"/>

両方のボタンに同じクリックイベントを与えるだけです

1
user6480540