C# .NETプログラミングメモ(その1)

今日覚えた事をメモ。
まず、自作イベントの作り方。
public class JisakuEventArgs : EventArgs
{
 public string Message;
}

恐らく、これでEventArgsクラスを継承した自作クラスを作ってやって、
イベントを発生させる発生元のクラス内部に、

public delegate void JisakuEventHandler(object sender, JisakuEventArgs e);
public event JisakuEventHandler JisakuEvent_EvHNDL;

JisakuEventArgsを引数としたJisakuEventHandlerを定義し、そのハンドラをevent化してやる。

protected virtual void On_JisakuEvent(JisakuEventArgs e)
{
 if (JisakuEvent_EvHNDL != null)
 {
   JisakuEvent_EvHNDL(this, e);
 }
}

そしてこいつも発生元クラス内に書いておいて、最後に、

JisakuEventArgs JEArgs = new JisakuEventArgs();

これでイベントの初期設定は完了。いつでも動かせる状態になりました。
では、使ってみましょう。
JEArgs.Message = "イベント起動成功";
とかしてイベントが持つArgsの中のMessage変数に文字列を叩き込んでやって、その後、

On_JisakuEvent(JEArgs)

この一文でString型Message変数を値として持ったイベントが発生しますので、それを今度は受け取りたい側で、

EventHasseiClass ehc = new EventHasseiClass();
ehc.JisakuEvent_EvHNDL += new EventHasseiClass.JisakuEventHandler(this.ehc_JisakuEvent_EvHNDL);

最初の一文は単に、外部イベントを内包した発生元クラスをインスタンス化しているだけです。
次の一文がまだピンとは来てないんですが、イベントハンドラデリゲートを初期化かなんかしてますか…?
まぁ、必要なものという事で。
で、ぶっちゃけここらへんはある程度まで入力するとMS Visual C# 2005 ExEdition君がTabキー連打するだけで自動生成してくれちゃったりするんですが…

void ehc_JisakuEvent_EvHNDL(object sender, JisakuEventArgs e)
{
 MessageBox.Show(e.Message.ToString());
}

とか、イベントをハンドリングできるので、後はその内部で、eとして渡ってきたMessageを参照してやれば、
外部クラスからのイベント起動->フォームクラス側でイベントキャッチの流れが出来るように。