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在单击按钮时输入断点并显示打开的内容当用户想要结束应用程序时,您计划如何有效地关闭这些表单?