0

可能重复:
当我关闭启动表单时,如何防止应用程序终止?

想象一个具有 2 个表单的应用程序,Form1 和 Form2。当我单击 Form1 中的按钮时,我想打开 Form2 并关闭 Form1,关闭而不是隐藏。我这样做的方式是:

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

当我运行代码时,它会关闭 form1 并结束应用程序。我不确定,但可能是因为在我的 Program.cs 中我有Application.Run(new Form1());?或者这一行只意味着当应用程序启动时它应该加载Form1?

4

3 回答 3

4

有多种方法可以实现您想要的......这完全取决于您需要的微妙交互Form1以及Form2您希望如何组织序列。

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

请注意,这是在您认为不再显示表单时对表单执行的任何“表单关闭”调用(即 .Close())的补充。

这将允许你Form1最初显示......(因为你使用无模式Show())......然后你可以关闭Form1并创建并显示辅助Form2......然后做Application.Exit();

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

于 2012-11-22T00:37:56.097 回答
3

是的你是对的。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();
于 2012-11-22T00:39:46.397 回答
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();
}
于 2012-11-22T00:48:13.403 回答