c# True 隐藏窗体
c# True hide form
我有 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();
}
但是,当我打开或 'show' 表单时,它似乎创建了它的一个新实例。例如,我会打开 SlimSkin 并返回到 form1,如果我要关闭 it/stop 调试,每个表单 运行 的实例在后台仍然存在,所以程序不会停止 运行.
我也试过了
this.Visible = false;
和 this.Visible = true;
但结果相同。
有没有更有效的隐藏表格和调用相同隐藏表格的方法?
确实,您每次都在 _Click 处理程序中创建 Form1
和 SlimSkin
的新实例。
相反,您需要将包含 Form1
当前实例的字段 MainForm
添加到 SlimSkin
class 中,类似地,包含 [=18] 实例的字段 SlimForm
=] 变成 Form1
class.
然后像这样操作你的表单:
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
调用。如果不是 - 那么字段 MainForm
应该在像 Form1.
中一样使用之前实例化
在每个按钮上单击您都在创建其他表单的新实例。如果你想完全摆脱实例,你可以尝试处理
当您的主窗体创建子窗体、隐藏自身并显示该窗体时,让它附加一个处理程序到 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();
}
我有 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();
}
但是,当我打开或 'show' 表单时,它似乎创建了它的一个新实例。例如,我会打开 SlimSkin 并返回到 form1,如果我要关闭 it/stop 调试,每个表单 运行 的实例在后台仍然存在,所以程序不会停止 运行.
我也试过了
this.Visible = false;
和 this.Visible = true;
但结果相同。
有没有更有效的隐藏表格和调用相同隐藏表格的方法?
确实,您每次都在 _Click 处理程序中创建 Form1
和 SlimSkin
的新实例。
相反,您需要将包含 Form1
当前实例的字段 MainForm
添加到 SlimSkin
class 中,类似地,包含 [=18] 实例的字段 SlimForm
=] 变成 Form1
class.
然后像这样操作你的表单:
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
调用。如果不是 - 那么字段 MainForm
应该在像 Form1.
在每个按钮上单击您都在创建其他表单的新实例。如果你想完全摆脱实例,你可以尝试处理
当您的主窗体创建子窗体、隐藏自身并显示该窗体时,让它附加一个处理程序到 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();
}