我正在制作一个简单的记事本。我想要发生的是,当用户点击“新建”按钮时,打开的表单将关闭并打开一个新表单。 这就是我已经拥有的:
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();
}
新表单会打开,但旧表单不会关闭。
答案 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()"。