如何关闭主窗体和子窗体(而子窗口必须在主窗体关闭时关闭)

本文关键字:窗体 何关闭 窗口 | 更新日期: 2023-09-27 18:15:48

我有一个主窗口和几个子窗口。子窗口包含一些数据,所以我不想关闭它们。所以我在FormClosing中隐藏它们我设置了e.Cancel = true;

但是当我想要主窗口关闭(退出应用程序)。我很难退出它。首先它关不上。但是有一个额外的变量要注意,我正在关闭,我需要2次点击来实际关闭它(问题是在onFormClosing(mainWIndow, ...)执行之前,框架试图关闭将首先隐藏自己的子进程)。

// main and child windows have this as form closing event proc
private void onFormClosing(object sender, FormClosingEventArgs e)
{
    if (sender == this) // main
    {
        exitApp = true;
    }
    else
        if (sender == formChild) // child
        {
            if (!exitApp)
            {
                e.Cancel = true;
                formChild.Hide();
            }
        }
}

如何一键关闭它们?

我也想避免Application.Exit();,因为我需要确保所有线程正确关闭。所以最好是干净利落的。

如何关闭主窗体和子窗体(而子窗口必须在主窗体关闭时关闭)

您可以使用application . exit()强制应用程序。

我自己找到解决办法了:

// ...
if (sender == this) // main
{
    exitApp = true;
    FormClosing -= onFormClosing;
    Close();
}
// ...