首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么不从窗体持有人触发WinForm Form.FormClosed事件?

为什么不从窗体持有人触发WinForm Form.FormClosed事件?
EN

Stack Overflow用户
提问于 2013-12-02 14:59:17
回答 2查看 968关注 0票数 2

我有两个表格,FormAFormB。FormA是从FormB按钮单击事件打开的。在FormA持有者中,注册了来自FormA的FormClosed事件。问题是,如果我关闭FormB,FormA也会关闭,但是FormClosed事件不会被调用.

如何使FormClosed事件被调用?

我希望FormA Holder在FormA关闭/关闭时得到通知,以释放资源。

以下是简化的代码片段:

代码语言:javascript
运行
复制
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();
}
EN

回答 2

Stack Overflow用户

发布于 2013-12-02 15:12:49

您需要使用消息循环启动FormB。

用这个:

代码语言:javascript
运行
复制
 Application.Run(new FormB());

而不是

代码语言:javascript
运行
复制
var formB = new FormB();
formB.ShowDialog();

Application.Run确实是这样做的,但你只能叫它一次公关。Thread

票数 1
EN

Stack Overflow用户

发布于 2013-12-02 15:09:57

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20331281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档