複数のボタンがあるときは、それぞれにイベントハンドラーをインストールするのが一般的です。しかし、一つのイベントハンドラーにまとめることも可能です。この場合、どのコントロールから、イベントが発生したのかを区別する必要があります。
これには、引数の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