可能重复:
How do I prevent the app from terminating when I close the startup form?
想象一下具有2种形式的应用程序,Form1和Form2。当我单击Form1中的按钮时,我想打开Form2并关闭Form1,关闭不隐藏。 我这样做的方式是:
_Form2 = new Form2();
_Form2.Show();
this.Close();//or this.Dispose();
当我运行代码时,它会关闭form1并结束应用程序。我不确定,但也许是因为在我的Program.cs中我有Application.Run(new Form1());
?或者这一行只表示当应用程序启动时它应该加载Form1?
答案 0 :(得分:4)
有多种方法可以实现您想要的......这一切都取决于您在Form1
和Form2
之间需要的微妙互动以及您希望如何组织序列。
一种方法是使用Application.Run()
代替......但是当你想要关闭应用程序时必须使用Application.Exit()
....因为你需要发出消息循环和你的应用程序的信号应该退出。
请注意,除了您认为不再显示之外,您在表单上执行的任何“表单结束”调用(即.Close())之外。
这将允许您最初显示Form1
....(因为您使用无模式Show()
).....然后您可以关闭Form1
并创建和显示辅助Form2
.....然后执行Application.Exit()
;
MSDN中更复杂的示例,即带有上下文的Application.Run(ApplicationContext)
,如果您有一个用例,您希望有多个表单,然后希望它们在关闭时退出。
答案 1 :(得分:1)
是的,你是对的。 Run方法中提到的表单是“主窗体”,如果关闭它,您将关闭应用程序。如果要关闭Form1,可以执行以下操作:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 form = new Form1();
form.Show();
Application.Run();
关闭Form1并在按钮上打开Form2的代码点击:
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();
答案 2 :(得分: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();
}