Winform Shutdown模式来自"当启动表格关闭时#34;至"当最后一个表格关闭时#34;

时间:2015-09-16 12:51:34

标签: c# .net winforms

我正在尝试执行以下线程中描述的相同操作(在C#winforms应用程序中):

How to open a new independent form?

并回答: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();

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

1 个答案:

答案 0 :(得分:-1)

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

Application.Run(new YourMainForm());

只需将其更改为

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

编辑:事实证明它并非如此简单,因为现在应用程序永远不会退出。但这个想法是一样的。虽然似乎有类似的回答问题,但我不喜欢这个答案,宁愿把这个课放在我的口袋里(图书馆)

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()));