在不关闭应用程序的情况下关闭并重新打开表单

本文关键字:新打开 表单 应用程序 情况下 | 更新日期: 2023-09-27 18:05:24

我试图重置我的主要形式,这样我就可以重置所有的文本框和变量很容易。我已经添加了一个bool到我的程序。cs,使应用程序保持打开,而窗体关闭,然后重新打开。当我试图关闭它时,on_closing甚至触发两次。我不知道该怎么做才能阻止它的发生,但我知道必须做一些简单的事情。

Program.cs:

static class Program
{
    public static bool KeepRunning { get; set; }
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        KeepRunning = true;
        while (KeepRunning)
        {
            KeepRunning = false;
            Application.Run(new Form1());
        }
    }
}

Form1:

private void button1_Click(object sender, EventArgs e)
    {
        Program.KeepRunning = true;
        this.Close();
    }
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult dialogResult = MessageBox.Show("You have unsaved work! Save before closing?", "Save?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);
        if (dialogResult == DialogResult.Yes)
        {
            e.Cancel = true;
            MessageBox.Show("saving then closing");
            Application.Exit();
        }
        if (dialogResult == DialogResult.No)
        {
            MessageBox.Show("closing");
            Application.Exit();
        }
        if (dialogResult == DialogResult.Cancel)
        {
            e.Cancel = true;
            MessageBox.Show("canceling");
        }
    }

在不关闭应用程序的情况下关闭并重新打开表单

删除Application.Exit()。由于您已经在FormClosing事件处理程序中,如果Program.KeepRunning设置为false,则应用程序将退出。

这是因为您调用了Application.Exit()。由于您的表单尚未关闭,如果您尝试关闭应用程序,该指令将尝试首先关闭表单,这反过来将第二次调用事件处理程序。

另外,我不认为你需要application . exit(),因为这是你唯一的形式,因此,应用程序将自动关闭(至少这是在我的VB6旧时代发生的事情!)