c# - 为什么 WinForm Form.FormClosed 事件不从窗体持有者触发?

标签 c# winforms events

我有 2 个表格,FormAFormB。从 FormB 按钮单击事件打开 FormA。在 FormA holder 中,注册了来自 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();
}

最佳答案

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

 Application.Run(new FormB());

代替

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

Application.Run确实如此,但你只能调用一次 pr。 线程

关于c# - 为什么 WinForm Form.FormClosed 事件不从窗体持有者触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20331281/

相关文章:

c# - SiteCore .Net 成员(member)示例

c# - GlobalMemoryStatus 函数报告 NUnit 控制台运行中的无效可用页面文件

c# - 如何在 Windows 上运行的自托管 ServiceStack 中获取用户名

winforms - 在 Visual Studio 2010 中控制 Tab 键顺序

c# - 如何在 DateTimePicker 中设置字体大小

c# - 将事件从 C 类通过 B 类传递到 A 类

c# - 什么是 C# 中的谓词?

c# - 在 WPF 中加载 BitmapImage 的源代码?

javascript - 如何获取鼠标输入的元素ID?

javascript - 使用 jQuery 获取集合中被点击元素的索引