检测子窗体何时关闭

Detect when a child form is closed

我有以下表格:

我需要的是不仅在创建 Form1 时调用 Initialize(),而且在关闭 Form2 时调用 Initialize(),因为 Form2 可能修改了一些东西,使得 Initialize 需要再次调用。

如何检测 form2 何时关闭?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Initialize();
    }

    void Initialize()
    {
        // Read a config file and initialize some stuff
    }

    // Clicking this button will open a Form2
    private void button1_Click(object sender, EventArgs e)
    {
        var form2 = new Form2().Show();
    }
}

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
        // some stuff that Form2 does which involves modifying the config file
    }
}

您只需要为 FormClosing 事件添加一个事件处理程序,该处理程序可以是您的第一个表单 class,您可以在此处调用该表单的每个内部方法 class

private void button1_Click(object sender, EventArgs e)
{
    var form2 = new Form2();
    form2.FormClosing += childClosing;
    form2.Show();
}
private void childClosing(object sender, FormClosingEventArgs e)
{
    Initialize();
    ....
}

除了 Steve 的出色回答之外,您还可以考虑将 Form2 显示为 模态对话框。这将意味着 Form1 中的代码执行停止,直到 Form2 被关闭。这可能适用于您的应用程序,也可能不适用于您的应用程序,我们不知道它的作用。

无论如何,你会像这样使用 ShowDialog() 而不是 Show()

// Clicking this button will open a Form2
private void button1_Click(object sender, EventArgs e)
{
    var form2 = new Form2().ShowDialog(); // <-- code STOPS here until form2 is closed
    Initialize(); // form2 was closed, update everything
}