我有2个表单,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;
,但它也得到了相同的结果。
是否有更有效的方法隐藏表单并回忆相同的隐藏表单?
答案 0 :(得分:1)
当您的主窗体创建子窗体,隐藏自身并显示该窗体时,让它将一个处理程序附加到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();
}
答案 1 :(得分:0)
确实,您每次都会在_Click处理程序中创建Form1
和SlimSkin
的新实例。
相反,您需要将包含MainForm
的当前实例的字段Form1
添加到SlimSkin
类中,并将包含SlimForm
实例的字段ClimSkin
添加到{{1}中}。class。
然后操纵你的表格,如:
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之前,应该实例化字段Form1
。
答案 2 :(得分:0)
在每个按钮上单击,您将创建其他表单的新实例。如果你想完全摆脱实例
,你可以尝试处理