如何多次打开和关闭窗体

时间:2011-10-23 10:09:02

标签: c# winforms

如何多次打开表单?我有这个事件:

Form2 myForm = new Form2();

private void button_Click(object sender, EventArgs e)
{
   myForm.Show();
}

当我使用VisualStudio 2008调试我的项目时,我第一次点击按钮时,表单已显示,但当我关闭它时,我试图再次打开它,我收到类似这样的错误:无法访问已删除的对象。对象名称:'Form2'。

有人可以向我解释这种行为吗?

3 个答案:

答案 0 :(得分:3)

您还可以覆盖Form2 Closing事件,将其中断并调用Hide()方法。这样,您不必每次要显示窗口时都创建新实例。

修改
有关Stackoveflow解释此方法的问题的Here's示例。您需要做的是,在创建Form2类的原始实例时,通过向Form2类添加以下代码来连接其结束事件:

    private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        Hide();
        e.Cancel = true; 
    }

就是这样。您无需更改button_Click处理程序。

答案 1 :(得分:2)

当您关闭表单时,它已被处理(并且无法再显示),您应该创建新实例(在按钮处理程序事件中):

Form f = new Form();
f.Show();

答案 2 :(得分:1)

您在哪里创建Form2

您可以拥有当前表单的本地字段来保存对它的引用,例如:

private Form2 myForm2;

然后当你想要展示它时,你可以这样做:

if(myForm2 == null)
{
  myForm2 = new Form2();
}

myForm2.Show();

将第二个片段放在Button_Click事件中,将第一个片段放在Form1类的任何方法之外。它应该工作。