c# True 隐藏窗体

c# True hide form

我有 2 个表格,Form1SlimSkin。两者都有关闭表单并通过以下方式显示相反表单的按钮:

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 处理程序中创建 Form1SlimSkin 的新实例。

相反,您需要将包含 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();
}