独自のボタンクラスをButtonクラスから継承してみます。
独自のボタンクラスがあると、On何タラ系メソッドが使えます。
ButtonクラスにはOnClickメソッドがあるので、これを使えばイベントにデリゲートを関連づける作業がいらなくなります。
では、早速プログラムを見てみましょう。
// button03.cs
using System;
using System.Drawing;
using System.Windows.Forms;
class button03
{
    public static void Main()
    {
        MyForm mf = new MyForm();
        MyButton mb1 = new MyButton("ボタン1", mf, new Point(10, 10));
        MyButton mb2 = new MyButton("ボタン2", mf, new Point(20 + mb1.Width, 10));
        Application.Run(mf);
    }
}
class MyForm : Form
{
    public MyForm()
    {
        Text = "猫でもわかるプログラミング";
        BackColor = SystemColors.Window;
    }
}
class MyButton : Button
{
    string btnstr;
    public MyButton(string str, Form form, Point pt)
    {
        Text = str;
        Parent = form;
        Location = pt;
        BackColor = SystemColors.Control;
        btnstr = str;
    }
    protected override void OnClick(EventArgs e)
    {
        base.OnClick(e);
        MessageBox.Show(btnstr + "を押したね", "猫でもわかるプログラミング",
            MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
    }
}
最期の方のMyButtonクラスを見てみましょう。これは、Buttonクラスを継承しています。コンストラクタMyButtonは、引数を利用してMyButtonクラスのText, Parent, Locationプロパティを設定しています。また、Textは、btnstrフィールドにも保存しています。これを利用して、ボタンの区別をしようというものです。
OnClickメソッドをオーバーライドしています。OnClickメソッドは、Controlクラスから継承されてきています。これで、Clickイベントに対応できます。
ここでは、「btnstr + "を押したね"」というメッセージボックスを出していますが、btnstrは、コンストラクタでもらってきたstringですね。
Mainメソッドでは、MyButton(表示する文字列, 親, 位置)でボタンを作ることができるので、すっきりした形になります。
実行結果は、次のようになります。
Update 28/Oct/2006 By Y.Kumei