前章では、ボタンの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