.NET でカスタムイベントを UserControl に追加する方法を何度か調べている気がしたので、まとめておく。
たしか .NET 2003 のときは結構面倒くさかった気がしたけど、今はクラスに event handler 定義するだけでプロパティパネルにも簡単に表示させることができるんだね。
とりあえず環境
VisualStudio 2005 C# .NET
ここではシンプルに UserControl にボタンを一個つけて、そのボタンイベントをメインの Form で拾いたい例を考える。
まずプロジェクトに UserControl を UserControl1 ってディフォルトのままで追加。そしてコードビューを開き、 UserControl1 クラスに event と delegate を追加する。ここではせっかくだから独自の EventArgs も定義してみる。
namespace WindowsApplication1 { public partial class UserControl1 : UserControl { public delegate void MyClickHandler(object sender, MyClickArgs cla); public event MyClickHandler MyClick;
次に、せっかくの EventArgs を定義する。
public class MyClickArgs : System.EventArgs { private string _mymes; public MyClickArgs(EventArgs ea, string mymes) { this._mymes = mymes; } public string MyMes { get { return _mymes; } } }
最後にボタンを一個追加して、そいつがクリックされた時にイベントを発生させるようにする。ボタン名はとりあえず button1 だとして。
private void button1_Click(object sender, EventArgs e) { MyClick(this, new MyClickArgs(e, "Enjoi?")); }
とまあ、ざっとこんな感じ。
これをコンパイルして、 Form に貼り付けると、この UserCtonrol のイベントパネルに MyClick というイベントが追加されているはず。これは便利だ。