2015-09-16 70 views
0

我试图做的是在下面的线程描述(在C#WinForms应用程序)同样的事情:WinForm的关断模式,以“当最后一个窗体关闭”

How to open a new independent form?

,并回答了这一点:https://stackoverflow.com/a/14902079/5342320

的问题是在Visual Studio社区我找不到此设置2015

只有微软的文档,我觉得这个是:

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

所以看起来这只存在于VB项目中。当我创建一个VB winforms项目时,我找到了该设置。有没有办法在C#项目中做类似的事情?

作为一种变通方法我用一个模式的形式:

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

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

回答

-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())); 
相关问题