私は2つのフォームを持っています。Form1 と Form2
フォーム 2 には、次のコードが含まれています。
/// Delegate used for Reset
public delegate void ResetEventHandler(object sender, ResetPathProfileEventArgs e);
public event ResetEventHandler ResetPathProfileEvent;
protected virtual void RaiseResetEvent(string status)
{
// Raise event if something is listening
if (ResetPathProfileEvent != null)
{
var args = new ResetPathProfileEventArgs { Status = status };
ResetPathProfileEvent(this, args);
}
}
form1で、次のコードを書きました
var frm = new Form2();
frm.ResetPathProfileEvent += frm_ResetPathProfileEvent;
frm.ShowDialog();
void frm_ResetPathProfileEvent(object sender, ResetPathProfileEventArgs e)
{
MessageBox.Show(e.Status);
}
これで、form2 でのユーザー アクションに基づいて、form1 コードでイベントを正常に発生させることができました。
同様に、フォーム1で予想されるユーザー操作の完了時にフォーム1がフォーム2に通知できるように、フォーム2に必要なコードを追加したいと思います。
そのためのさまざまな方法を模索しています。
a) form2 で public メソッドを公開し、form1 がそれを呼び出せるようにすることができます。b) form2 の public メソッドを参照する form1 でデリゲートとイベントを定義する
form2 でデリゲートとイベントを定義し、from1 からこのコールバック機能を実現することに関心があります。
ヒントはありますか???? +++++++++++++++++++++++++++++++++++
私がそれを達成した方法を書いてみましょう
form1 と form2 の両方を含む同じ名前空間に新しいデリゲートを定義しました
/// Delegate used for Redraw
public delegate void RedrawEventHandler(RedrawPathProfileEventArgs e);
このデリゲートへの参照変数を宣言しました
public RedrawEventHandler RedrawEvent;
form2コールバック関数を指すform1でこのイベントに登録されました
var frm = new Form2();
frm.ResetPathProfileEvent += frm_ResetPathProfileEvent;
this.RedrawEvent += new RedrawEventHandler(frm.RedrawCallBackFn);
frm.Show();
必要に応じて form1 から form2 へのイベントを呼び出す
var args = new RedrawPathProfileEventArgs();
args.FileName = "xyz";
RedrawEvent(args);
これは、これを行うために利用できる多くのオプションの 1 つであることを知っています。しかし、form1 はサード パーティ ベンダーのアプリケーションであり、プラグインを開発しているため、これを行う必要があります。
これら 2 つの間の緊密な結合を確保し、フォーム (form2) を統合するための form1 開発者の作業を最小限に抑えたいと考えていました。