【问题标题】:Winform Shutdown mode from "when startup form closes" to "when last form closes" [duplicate]Winform关闭模式从“启动表单关闭时”到“最后一个表单关闭时”[重复]
【发布时间】:2015-09-16 12:51:33
【问题描述】:

我正在尝试做与以下线程中描述的相同的事情(在 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();

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

【问题讨论】:

    标签: c# .net winforms


    【解决方案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()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多