c#真实隐藏形式
我有两张表格,c#真实隐藏形式,c#,forms,hide,C#,Forms,Hide,我有两张表格,Form1和SlimSkin。两者都有按钮关闭其窗体,并通过以下方式显示相反的窗体: 在Form1上 private void slimbutton_Click(object sender, EventArgs e) { var slimform = new SlimSkin(); slimform.Show(); this.Hide(); } 在SlimSkin上 private void button2
Form1
和SlimSkin
。两者都有按钮关闭其窗体,并通过以下方式显示相反的窗体:
在Form1上
private void slimbutton_Click(object sender, EventArgs e)
{
var slimform = new SlimSkin();
slimform.Show();
this.Hide();
}
在SlimSkin上
private void button2_Click(object sender, EventArgs e)
{
var form1 = new Form1();
this.Close();
form1.Show();
}
然而,当我打开或“显示”表单时,它似乎会创建一个新的实例。例如,我打开SlimSkin并返回到form1,如果我要关闭它/停止调试,每个表单的实例仍在后台运行,因此程序不会停止运行
我也试过了
this.Visible=false代码>和this.Visible=true代码>但结果是一样的
有没有更有效的方法隐藏一个表单并回忆同一个隐藏的表单 事实上,每次单击处理程序时,您都在创建Form1
和SlimSkin
的新实例
相反,您需要将包含Form1
当前实例的字段MainForm
添加到SlimSkin
类中,并将包含ClimSkin
实例的类似字段SlimForm
添加到Form1
类中
然后操纵表单,例如:
public Form SlimForm;
private void slimbutton_Click(object sender, EventArgs e)
{
if (SlimForm == null)
{
SlimForm = new SlimSkin();
SlimForm.MainForm = this;
}
SlimForm.Show();
this.Hide();
}
然后在SlimSkin
中:
private Form MainForm;
private void button2_Click(object sender, EventArgs e)
{
MainForm.Show();
this.Hide();
}
这里我假设SlimForm
总是首先从Form1
调用。如果不是,则在使用表单1中的类似项之前,应先实例化字段MainForm
。在每个按钮上单击,以创建其他表单的新实例。如果希望在主窗体创建子窗体、隐藏自身并显示该窗体时完全摆脱实例,可以尝试dispose,让它将处理程序附加到FormClosed
事件,以便在关闭该窗体时显示自身:
private void slimbutton_Click(object sender, EventArgs e)
{
var slimform = new SlimSkin();
slimform.Show();
slimform.FormClosed += (s, args) => this.Show();
this.Hide();
}
当第二个窗体自行关闭时,它将触发事件,事件将显示主窗体,因此第二个窗体只需自行关闭:
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
您是否尝试了this.Hide()
而不是this.Close()
在按钮2中单击?@tnw,是的,还有同样的事情。关闭所有窗体后,它仍将继续运行。这就像是创建了一个新表单1,而不是显示隐藏的表单。@EyeSeeSharp在单击按钮时输入断点并显示打开的内容当用户想要结束应用程序时,您计划如何有效地关闭这些表单?