2012-11-22 59 views
0

可能重复:
How do I prevent the app from terminating when I close the startup form?关闭第一形式

试想用2种形式,Form 1和Form的应用程序。当我点击Form1中的一个按钮时,我想打开Form2并关闭Form1,关闭不隐藏。 我是这样做的方式是:

_Form2 = new Form2(); 
_Form2.Show(); 
this.Close();//or this.Dispose(); 

当我运行它关闭Form1并结束应用程序的代码。林不知道,但也许是因为在我的Program.cs我有Application.Run(new Form1());?或者这行只意味着当应用程序启动时它应该加载Form1?

回答

4

有很多方法可以实现你想要的......这一切都取决于你需要的Form1Form2之间的微妙交互以及你想如何组织序列。

一种方法是使用Application.Run()替代....但是当您想要关闭应用程序时,您必须使用Application.Exit() ....因为您需要发出信号指示消息循环和应用程序应该退出。

请注意,除了您在窗体上执行的任何“窗体关闭”调用(即.Close())之外,您认为它不再显示。

那么这将让你展现Form1开始......(因为你使用无模式Show())......然后就可以关闭Form1以及创建和显示中学Form2 .....然后做Application.Exit();

MSDN中更复杂的示例,即带有上下文的Application.Run(ApplicationContext)是,如果您有一个用例,您希望具有多个表单,然后希望它们在关闭时退出。

1

是的,你是对的。 Run方法中提到的表单是“主窗体”,如果关闭它,您将关闭应用程序。如果你想关闭Form1,你可以做到以下几点:

Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Form1 form = new Form1(); 
      form.Show(); 
      Application.Run(); 

和代码以关闭Form1并打开窗体2上的按钮点击:

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      this.Close(); 
      Form2 form = new Form2(); 
      form.Show(); 
     } 
    } 

要从应用退出只是把一个更按钮(或提供事件处理程序),然后运行该代码:

Application.Exit(); 
1

如果你只需要形成一个序列,你可以在主线程采取序列的照顾。

所以在主,你必须:

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new Form1()); 
    Application.Run(new Form2()); 
} 

和所有你需要做的就是关闭Form1为它继续下一个:

private void button1_Click(object sender, EventArgs e) 
{ 
    this.Close(); 
}