为什么WinForm Form.FormClosed事件不会从表单持有者触发?

时间:2013-12-02 14:59:18

标签: c# winforms events

我有两种表格, FormA FormB 。从FormB按钮单击事件打开FormA。在FormA持有者中,FormA的FormClosed事件已经注册。 问题是,如果我关闭FormB,FormA也会关闭,但不会调用FormClosed事件。

如何调用FormClosed事件?
我希望在FormA关闭/关闭以处置资源时,会通知FormA Holder。

这是简化的代码段:

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();
}

2 个答案:

答案 0 :(得分:1)

您需要使用消息循环启动FormB 用这个:

 Application.Run(new FormB());

而不是

var formB = new FormB();
formB.ShowDialog();

Application.Run确实表明了这一点,但你只能称它为pr。 Thread

答案 1 :(得分:0)

您可以尝试从FormB Closed事件中调用清理代码,方法是将清理代码提取到类FormAHolder中的方法并在需要时调用它。