表单在尝试隐藏时会被丢弃

时间:2016-04-28 11:53:17

标签: c# .net winforms

我试图将我的主要表单隐藏在某个特定事件上,然后再显示它。问题是当我隐藏它时,表单会被丢弃。

我隐藏表单的代码:

private void MessageRecived(object sender)
{
    //Do stuff

    if (status == NetConnectionStatus.Connected)
    {
        this.Hide();
    }
    else if (status == NetConnectionStatus.Disconnected)
    {
        this.Show();
    }

    //Do some more stuff
}

当" this.Show()"调用方法时,抛出以下异常:

  

System.ObjectDisposedException

     

其他信息:无法访问已处置的对象。

我也尝试过使用" this.Visible = false"和#34; this.SetVisibleCore(false)"但我得到了同样的结果。

如何在不放弃表格的情况下隐藏表单?

修改

我发现了我的错误:我的代码中有一个引用该表单的对象,它关闭了它。感谢Justin Harvey,他指出其他人正在使用该表格。

1 个答案:

答案 0 :(得分:0)

您的表单似乎是由垃圾收集器或其他代码处理的。

中设置断点
protected override void Dispose(bool disposing)

方法(通常在NAME.Designer.cs文件内)

我做了以下实验,效果很好!

  1. 创建新的WindwsForms应用程序
  2. 在表单设计器中的主窗体上放置时间
  3. 添加FormClosing事件处理程序
  4. 添加时间Tick事件处理程序
  5. 编写以下代码:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (MessageBox.Show("Press Yes to Hide only the Form?", "Exit", MessageBoxButtons.YesNo) ==
            DialogResult.Yes)
        {
            e.Cancel = true;
            timer1.Enabled = true;
            Hide();
        }
    }
    
    private void timer1_Tick(object sender, EventArgs e)
    {
        Show();
        timer1.Enabled = false;
    }