我有兩種形式。 Form1和Form2Windows窗體中的雙向通信 - 從父母到孩子的回撥
Form 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);
}
有通過我能成功地提高基於Form 2上的用戶操作Form 1代碼的事件。
同樣,我想讓在form2中添加所需的代碼,以便form1可以在form1上完成期望的用戶交互後通知form2。
我正在嘗試探索各種方法。
a)我可以在form2上公開一個公共方法,並允許form1調用它。 b)在form1上定義一個參考form1的公共方法的委託和事件
我有興趣在form2上定義委託和事件,並從from1實現此回調功能。
任何提示???? +++++++++++++++++++++++++++++++++
讓我寫信我如何實現它
我已經在其中既包含Form 1和Form
/// Delegate used for Redraw
public delegate void RedrawEventHandler(RedrawPathProfileEventArgs e);
我已經聲明瞭一個參考變量來此委託
public RedrawEventHandler RedrawEvent;
registred此事件在Form1指着窗口2回撥相同的命名空間中定義一個新的委託功能
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);
我知道,這是可以做到這一點許多選項之一。但我需要做到這一點,因爲form1是第三方供應商應用程序,我正在開發一個插件
我想確保這兩個之間的緊密耦合,並給予form1開發人員很少的工作來整合我的表單form2)
感謝您的回覆。我現在更新了我的答案,並解釋了爲什麼我必須這樣做:) –