[C#] 子フォームのイベントを親フォームでキャッチして処理する
親フォームから開いたダイアログで、なにか値が変わった場合に、親フォームへイベントとして通知するには、子フォーム側でイベントを定義します。
◆子フォーム側
発生させるイベントを定義する
CategoryやDescriptionを定義しておくと利用者側に親切。
public delegate void RefreshEventHandler( object sender, EventArgs e); [Category("動作")] [Description("情報を更新するときに発生するイベント。")] public event RefreshEventHandler RefreshEvent;
任意の場所でイベントを発生させる
private void btnRefresh_Click( object sender, EventArgs e) { this.RefreshEvent(this, new EventArgs ()); }
◆親フォーム側
子フォームを生成する際に、イベント処理を定義する。
この例では無名delegateで簡易的に書いていますが。処理内容が複雑であれば、関数を外で定義した方がいいです。
子フォームでイベントが発生した時に、この処理が実行されます。
FrmTest form = new FrmTest(); form.RefreshEvent += delegate (object sender, EventArgs e) { Console.WriteLine("test"); }; form.ShowDialog();
あまり複雑にすると処理の流れが置いづらくなるので、程々にはしておきたいですが、いちいち子フォームを閉じなくてもいろいろと処理ができるので、使いこなすと便利です。
== ランキングに参加しています。ぜひクリックお願いします ==
同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。サーバーまたは共有リソースへの以前の接続をすべて切断してから、再試行してください。 IE11のユーザーエージェントはこれまでと違うかも