关闭第一个表格

时间:2012-11-22 00:26:08

标签: c# winforms

  

可能重复:
  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?

3 个答案:

答案 0 :(得分:4)

有多种方法可以实现您想要的......这一切都取决于您在Form1Form2之间需要的微妙互动以及您希望如何组织序列。

一种方法是使用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();
}