第12章 ボタンのイベント処理


前章では、ボタンの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」をクリックしたのと同じ効果が得られます。

では、実行結果を見てみましょう。

イベントハンドラーがひとつでも、どのボタンが押されたのかは判断できますね。




[C# フォーム Index] [C# コンソール Index] [総合Index] [Previous Chapter] [Next Chapter]

Update 27/Oct/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。