Winform从“启动窗体关闭时”关闭模式;当最后一种形式结束时

本文关键字:结束 一种 最后 启动 窗体 Winform 模式 | 更新日期: 2023-09-27 18:13:03

我正在尝试做同样的事情,如在以下线程中描述的(在c# winforms应用程序中):

如何打开一个新的独立表单?

和回答如下:https://stackoverflow.com/a/14902079/5342320

问题是我在Visual Studio Community 2015中找不到这个设置。

我找到的唯一Microsoft文档如下:

https://msdn.microsoft.com/en-us/library/vstudio/0hzfysdc (v = vs.100) . aspx

所以这似乎只存在于VB项目中。当我创建一个VB winforms项目时,我找到了这个设置。有没有一种方法可以在c#项目中做类似的事情?

作为一种变通方法,我使用了模态形式:

frmMyForm frm = new frmMyForm();
frm.ShowDialog();

但是这使得我不能在新窗体关闭之前关闭父窗体。我想要的是能够在打开新表单后关闭父表单,而不关闭整个应用程序。

Winform从“启动窗体关闭时”关闭模式;当最后一种形式结束时

默认情况下,您的Main方法包含以下行

Application.Run(new YourMainForm());

改成

new YourMainForm().Show();
Application.Run();

EDIT:事实证明,这并不是那么简单,因为现在应用程序永远不会退出。但思路是一样的。虽然似乎有类似的答案,但我不喜欢这个答案,宁愿把这个类放在我的口袋里(库)

public class LastFormClosingApplicationContext : ApplicationContext
{
    public LastFormClosingApplicationContext(Form mainForm) : base(mainForm) { }
    protected override void OnMainFormClosed(object sender, EventArgs e)
    {
        for (int i = Application.OpenForms.Count - 1; i >= 0; i--)
        {
            var form = Application.OpenForms[i];
            if (form != MainForm)
            {
                MainForm = form;
                return;
            }
        }
        base.OnMainFormClosed(sender, e);
    }
}

当我需要这样的东西时,只要替换

Application.Run(new YourMainForm());

Application.Run(new LastFormClosingApplicationContext(new YourMainForm()));