前章では、ボタンのClickイベントにEventHandlerデリゲートを関連づけました。
複数のボタンがあるときは、それぞれにイベントハンドラーをインストールするのが一般的です。しかし、一つのイベントハンドラーにまとめることも可能です。この場合、どのコントロールから、イベントが発生したのかを区別する必要があります。
これには、引数のobject senderを利用します。
// button02.cs
using System;
using System.Drawing;
using System.Windows.Forms;
class button02 : Form
{
    static Button btn1, btn2;
    public static void Main()
    {
        button02 f = new button02();
        
        Application.Run(f);
    }
    static void btnOnClick(object sender, EventArgs e)
    {
        String mtitle = "button02";
        Button btn = (Button)sender;
        if (btn == btn1)
            MessageBox.Show("ボタン1が押されました", mtitle);
        else if (btn == btn2)
            MessageBox.Show("ボタン2が押されました", mtitle);
        else
            MessageBox.Show("これは何かの間違いです", mtitle);       
    }
    public button02()
    {
        Text = "猫でもわかるプログラミング";
        BackColor = SystemColors.Window;
        btn1 = new Button();
        btn1.Parent = this;
        btn1.Text = "ボタン&1";
        btn1.BackColor = SystemColors.Control;
        btn1.Location = new Point(10, 10);
        btn1.Click += new EventHandler(btnOnClick);
        btn2 = new Button();
        btn2.Parent = this;
        btn2.Text = "ボタン&2";
        btn2.BackColor = SystemColors.Control;
        btn2.Location = new Point(20 + btn1.Width, 10);
        btn2.Click += new EventHandler(btnOnClick);
    }
}
ボタンのテキストを指定するところで
btn1.Text = "ボタン&1"; btn2.Text = "ボタン&2";で「&」の文字が入っていることに注意してください。この文字自体は表示されません。その次の文字にアンダーラインが付き、その文字キーを打つと、そのボタンを押したことになります。上の例で言えば「1」キーを打つと「ボタン1」をクリックしたのと同じ効果が得られます。
では、実行結果を見てみましょう。
イベントハンドラーがひとつでも、どのボタンが押されたのかは判断できますね。
Update 27/Oct/2006 By Y.Kumei