我有两个表格,FormA和FormB。FormA是从FormB按钮单击事件打开的。在FormA持有者中,注册了来自FormA的FormClosed事件。问题是,如果我关闭FormB,FormA也会关闭,但是FormClosed事件不会被调用.。
如何使FormClosed事件被调用?
我希望FormA Holder在FormA关闭/关闭时得到通知,以释放资源。
以下是简化的代码片段:
internal class FormA : Form
{
public FormA()
{
this.Text = @"Form A";
}
}
internal class FormAHolder
{
internal FormA FormA { get; private set; }
internal FormAHolder()
{
this.FormA = new FormA();
this.FormA.FormClosed += this.OnFormAFormClosed;
}
private void OnFormAFormClosed(object sender, FormClosingEventArgs e)
{
Console.WriteLine("Hallo, please call me!!!");
//// Clean up code should be here....
}
}
internal class FormB : Form
{
public FormB()
{
this.Text = @"Form B";
var button = new Button { Text = @"Open Form A" };
button.Click += this.OnButtonClick;
this.Controls.Add(button);
}
private void OnButtonClick(object sender, EventArgs e)
{
var formAHolder = new FormAHolder();
formAHolder.FormA.Show();
}
}
[Test]
public void FormTest()
{
var formB = new FormB();
formB.ShowDialog();
}发布于 2013-12-02 15:12:49
您需要使用消息循环启动FormB。
用这个:
Application.Run(new FormB());而不是
var formB = new FormB();
formB.ShowDialog();Application.Run确实是这样做的,但你只能叫它一次公关。Thread。
发布于 2013-12-02 15:09:57
您可以尝试从FormB Closed事件调用清理代码,方法是将清理代码提取到FormAHolder类中的方法,并在需要时调用它。
https://stackoverflow.com/questions/20331281
复制相似问题