我正在将Visual Studio 2017用于某个项目
如何在关闭父窗体而不关闭父窗体和父窗体之前先加载子窗体
这样做只会关闭应用程序而不会加载下一个表单:
private void button_Click(object sender, EventArgs e) {
Form2 f2 = new Form2();
f2.Show();
this.Close();
}
编辑:问题重述
答案 0 :(得分:2)
由于Application.Run(new Form1())
中的Programm.cs
,应用程序已关闭。
这是winforms应用程序的默认模板,假定您将仅使用一种(主)表单,关闭该表单将终止应用程序。
我假设您仅将表单称为父/子,但它们不是MDI,也没有设置Owner属性。而是两种形式,其中有条件地显示第二个(单击右按钮时)。可以通过DialogResult
传递此条件。
将您的Main
方法更改为:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// Application.Run(new Form1()); - don't use this anymore
var form1 = new Form1();
if(form1.ShowDialog() == DialogResult.XXX)
(new Form2()).ShowDialog();
}
然后单击按钮事件:
void button_Click(object sender, EventArgs e) => DialogResult.XXX;
这将关闭表单并返回指定值。
如果没有其他OK
没问题,则您必须choose return value自己。
答案 1 :(得分:1)
不理解您不使用“隐藏”的意思,因为这是最好的方法...
如果您不想使用“隐藏”,则可以使用“可见”并将其设置为false ...诸如此类:
this.Visible = false;
var form2 = new asas();
form2.Closed += (s, args) => this.Close();
form2.Show();
编辑:
您已经编辑了问题,并且没有提及有关hide的任何事情。
您可以执行以下操作:
this.Hide();
var form2 = new Form2();
form2.Closed += (s, args) => this.Close();
form2.Show();
绝对是执行此操作的最佳方法。显示其他表格并关闭旧表格。
答案 2 :(得分:0)
通常的方法是使用Form1.Hide();
如果要这样做,可以在Program.cs
中进行:
在Application.Run(new Form1());
之后添加:
Application.Run(new Form2());
这样做,当您关闭Form1
时,Form2
将被启动。
要关闭Form1
,只需执行以下操作:
private void button1_Click(object sender, EventArgs e)
{
Close();
}
希望这会有所帮助。
编辑: 我读了你的编辑最好的解决方案可能是Mikev的答案。