独自のボタンクラスを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