打开一个新表单并关闭另一个表单c#

时间:2015-07-23 16:42:21

标签: c# forms

我正在制作一个简单的记事本。我想要发生的是,当用户点击“新建”按钮时,打开的表单将关闭并打开一个新表单。 这就是我已经拥有的:

DialogResult newdialogresult = MessageBox.Show("Are you sure you want to create a new file and close the existing one?", "Simple Notepad", MessageBoxButtons.YesNo);
if(newdialogresult == DialogResult.Yes)
{
    Form1 f1 = new Form1();
    f1.ShowDialog();
    this.Close();
}

新表单会打开,但旧表单不会关闭。

4 个答案:

答案 0 :(得分:1)

正确的做法是隐藏主要形式,我同意这一点。但是,您迟早要关闭子表单时可能需要关闭主表单。为此,您应该在触发子表单FormClosing事件时关闭主表单。试试这个:

Form2 form = new Form2();
form.Show();
form.FormClosing += (obj, args) => { this.Close(); };
this.Hide();

答案 1 :(得分:0)

如果您单步执行代码,则会在手动关闭新窗口之前看到this.Close();没有执行。

ShowDialog方法用于显示模式对话框。因此,在窗口关闭之前它不会返回。

根据您要执行的其他操作,您可以更改关闭/显示对话的顺序,也可以将其更改为仅Show或更改为Hide第一个表单。

答案 2 :(得分:0)

同意David的回答,并补充一点,如果你想要这种行为,你可以使用下面的代码片段 -

        DialogResult newdialogresult = MessageBox.Show("Are you sure you want to create a new file and close the existing one?", "Simple Notepad", MessageBoxButtons.YesNo);
        if (newdialogresult == DialogResult.Yes)
        {
            Form2 f1 = new Form2();
            f1.Show();
            this.Hide();
        }

答案 3 :(得分:0)

我想为感兴趣的人添加另一个选项。

在Program.cs文件中,您应该看到类似的内容:

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

这只是启动主线程并使指定的表单可见。 这个问题是当你运行" this.Close()"也将终止主线程,因此您尝试打开的任何表单也将关闭。

你可以像其他人一样建议使用" this.Hide()"但是这并不会释放当前表单正在消耗的资源。所以我喜欢在Program.cs文件中做到这一点:

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var frm = new Form1();
        frm.Show();
        Application.Run();
    }
}

即使当前表单已关闭,这也允许主线程继续。你必须要小心,并在你想要结束程序时结束主线程。你可以在" FormClosed"事件通过调用" Application.Exit()"。