3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
static避免類(lèi)和全局引用幾乎總是 100% 更好。
最好傳遞一個(gè)Action<FormC>允許您通知FormC即將關(guān)閉的消息。
嘗試這個(gè):
FormA
public partial class FormA : Form
{
public FormA()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
var formB = new FormB(this.ClosingC);
formB.Show();
}
private void ClosingC(FormC formC)
{
MessageBox.Show("Closing C");
}
}
FormB
public partial class FormB : Form
{
public FormB()
{
InitializeComponent();
}
private Action<FormC> _closingFormC = null;
public FormB(Action<FormC> closingFormC)
: this()
{
_closingFormC = closingFormC;
}
private void Button1_Click(object sender, EventArgs e)
{
var formC = new FormC(_closingFormC);
formC.Show();
}
}
FormC
public partial class FormC : Form
{
public FormC()
{
InitializeComponent();
}
private Action<FormC> _closingFormC = null;
public FormC(Action<FormC> closingFormC)
: this()
{
_closingFormC = closingFormC;
}
private void FormC_FormClosing(object sender, FormClosingEventArgs e)
{
_closingFormC?.Invoke(this);
}
}

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
我會(huì)使用事件聚合。這是一個(gè)小的Install-Package Caliburn.Micro.EventAggregator
曾經(jīng)像
public class MyForm : Form, IHandle<MyEvent>
{
public MyForm()
{
SomeStaticPlace.EventAggregator.Subscribe(this); //Can be replaced with DI
}
public void Handle(MyEvent message)
{
//Act on event
}
}
并發(fā)布SomeStaticPlace.EventAggregator.Publish(new MyEvent(...));

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
這是帶有靜態(tài)事件的全局靜態(tài)類(lèi)FormClosed:
public static class GlobalStaticClass
{
public static event FormClosedEventHandler FormClosed;
public static void OnFormClosed(object sender, FormClosedEventArgs e)
{
FormClosed?.Invoke(sender, e);
}
}
這是FormC。引發(fā)FormClosed事件:
public partial class FormC : Form
{
public FormC()
{
InitializeComponent();
this.FormClosed += (sender, e) =>
{
GlobalStaticClass.OnFormClosed(sender, e);
};
}
}
這是FormA聽(tīng)這個(gè)事件的:
public partial class FormA : Form
{
public FormA()
{
InitializeComponent();
GlobalStaticClass.FormClosed += (sender, e) =>
{
//if (sender is FormC)
MessageBox.Show(((Form)sender).Name + " Closed, reason: " + e.CloseReason);
};
}
}
- 3 回答
- 0 關(guān)注
- 147 瀏覽
添加回答
舉報(bào)