【问题标题】:How to open and close a Form multiple times如何多次打开和关闭表单
【发布时间】:2011-10-23 10:09:01
【问题描述】:

如何多次打开一个表单?我有这个活动:

Form2 myForm = new Form2();

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

当我使用 VisualStudio 2008 调试我的项目时,我第一次单击该按钮时,显示了表单,但是当我关闭它并尝试再次打开它时,我收到类似于此的错误:无法访问已消除的对象。对象名称:“Form2”。

谁能向我解释这种行为?

【问题讨论】:

  • 如果你想重新打开你的表单,你最好把它隐藏起来。

标签: c# winforms


【解决方案1】:

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

编辑:
Here's Stackoveflow 上解释此方法的问题示例。您需要做的是,在创建 Form2 类的原始实例时,通过将以下代码添加到 Form2 类来连接其关闭事件:

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

仅此而已。您不必更改您的 button_Click 处理程序。

【讨论】:

  • 为什么不直接打电话给Hide()呢?
  • @UrbanEsc:OP 从未指定他如何关闭Form2 - 因为有多种方法可以做到这一点,所以最好在一个点处理关闭。但可以肯定的是,您可以直接致电Hide() - 这只是需要经历更多场景。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    你在哪里创建Form2

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

    private Form2 myForm2;
    

    那么当你想展示它时,你可以这样做:

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

    将第二个 sn-p 放在 Button_Click 事件中,将第一个放在 Form1 类的任何方法之外。那么它应该可以工作了。

    【讨论】:

    • 我在任何方法之外的 Form1 类上创建了 Form2,并将第二个 sn-p 放在 Button_Click 事件中,但它不起作用......我有同样的错误......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    相关资源
    最近更新 更多