我想知道如何使用this.Close()重新打开封闭的表单。每次我尝试使用Mainmenu.Show()打开封闭的表单时,异常都会抛出错误“无法访问已处置的对象。对象名称:Mainmenu”。
我怎样才能再次打开它?
答案 0 :(得分:3)
在Close
上调用Form
方法时,您无法调用Show
方法使表单可见,因为表单的资源已被释放,即Disposed
。要隐藏表单然后使其可见,请使用Control.Hide方法。
如果您想重新打开已关闭的表单,则需要以与创建时相同的方式重新创建它 - 首先:
YourFormType Mainmenu=new YourFormType();
Mainmenu.Show();
答案 1 :(得分:2)
我假设您有一个主窗体,它会创建一个非模态子窗体。由于此子表单可以独立于主表单关闭,因此您可以有两种方案:
基本上,您的主要表单应通过处理FormClosed
事件来跟踪子表单的生命周期:
class MainForm : Form
{
private ChildForm _childForm;
private void CreateOrShow()
{
// if the form is not closed, show it
if (_childForm == null)
{
_childForm = new ChildForm();
// attach the handler
_childForm.FormClosed += ChildFormClosed;
}
// show it
_childForm.Show();
}
// when the form closes, detach the handler and clear the field
void ChildFormClosed(object sender, FormClosedEventArgs args)
{
// detach the handler
_childForm.FormClosed -= ChildFormClosed;
// let GC collect it (and this way we can tell if it's closed)
_childForm = null;
}
}
答案 2 :(得分:0)
您无法显示已关闭的表单。 你可以调用this.Hide()来关闭表单。 稍后你可以调用form.Show();
或者您需要重新创建表单。
答案 3 :(得分:0)
智能呈现代码上面的小增加
private void CreateOrShow()
{
// if the form is not closed, show it
if (_childForm == null || _childFom.IsDisposed )
{
_childForm = new ChildForm();
// attach the handler
_childForm.FormClosed += ChildFormClosed;
}
// show it
_childForm.Show();
}
// when the form closes, detach the handler and clear the field
void ChildFormClosed(object sender, FormClosedEventArgs args)
{
// detach the handler
_childForm.FormClosed -= ChildFormClosed;
// let GC collect it (and this way we can tell if it's closed)
_childForm = null;
}