我试图将我的主要表单隐藏在某个特定事件上,然后再显示它。问题是当我隐藏它时,表单会被丢弃。
我隐藏表单的代码:
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,他指出其他人正在使用该表格。
答案 0 :(得分:0)
您的表单似乎是由垃圾收集器或其他代码处理的。
中设置断点protected override void Dispose(bool disposing)
方法(通常在NAME.Designer.cs
文件内)
我做了以下实验,效果很好!
FormClosing
事件处理程序Tick
事件处理程序编写以下代码:
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;
}