c#真隐藏形式

时间:2015-02-16 15:32:30

标签: c# forms hide

我有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();
    }

但是,当我打开或“显示”表单时,似乎喜欢它,它会创建一个新的实例。例如,我打开SlimSkin并返回到form1,如果我要关闭它/停止调试,那么仍然有一个在后台运行的每个表单的实例,所以程序不会停止运行。

我也试过

this.Visible = false;this.Visible = true;,但它也得到了相同的结果。

是否有更有效的方法隐藏表单并回忆相同的隐藏表单?

3 个答案:

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

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

在每个按钮上单击,您将创建其他表单的新实例。如果你想完全摆脱实例

,你可以尝试处理