同じハンドラにアタッチしたい6つのボタンがあります。これどうやってするの?
ボタンのイベントをサブスクライブする場合、それは単なる標準のイベントハンドラです。
button1.Click += myEventHandler;
同じコードを使用して、すべてのボタンのハンドラーを追加できます。
button1.Click += myEventHandler;
button2.Click += myEventHandler;
button3.Click += myEventHandler;
button4.Click += myEventHandler;
button5.Click += myEventHandler;
button6.Click += myEventHandler;
これにより、いずれかのボタンがクリックされたときにmyEventHandler
内のハンドラーが実行されます。
同じメソッドを各ボタンのクリックイベントにバインドすることにより、同じイベントを複数のボタンにアタッチできます。
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
}
ボタンを同じイベントに配線するだけです:
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
にキャストバックして、実際のボタンを区別するために必要なプロパティにアクセスできます。
どのボタンが押されたかを確認する方法:
sender
Button myButton = (Button)sender;
sender
は、イベントハンドラーのタイプobject
のパラメーターです。
デザイナーでイベントをダブルクリックする代わりに、イベントハンドラーの名前をデザイナーのプロパティグリッドのイベントに貼り付けることができます。
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;
}
}
私は専門家ではありませんが、私はこれを使用し、それはかなりシンプルに見えます
<Button x:Name="Button1" Content="Button" Click="Button_Click"/>
<Button x:Name="Button2" Content="Button" Click="Button_Click"/>
両方のボタンに同じクリックイベントを与えるだけです