【发布时间】:2014-10-26 10:25:43
【问题描述】:
我有一个表单,其中有一个名为“搜索”的按钮。当我单击它时,会打开另一个表单来搜索项目。当用户在第二种形式中单击 X 以关闭它时,我并不真的希望它关闭,我只是想让它不可见(secondForm.visible = false)。
我发现我需要的只是覆盖OnFormClosing() 方法,我已经在表单类中完成了,但它根本没有执行。我知道它没有被执行,因为当下次单击“搜索”按钮时(而不是做new SecondForm() 它只是尝试做secondForm.visible = true)我得到一个异常,说我不能在一个已删除的对象 (secondForm) 或类似的东西。所以第二个表单刚刚关闭而不是可见。
此时我开始认为我需要通过某种方式(我显然不知道)将这个新的覆盖方法分配给按钮 X。
编辑:
这是我在第二个类中重写的方法:
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
if (e.CloseReason == CloseReason.WindowsShutDown) return;
this.Visible = false;
}
点击“搜索”按钮时我会这样做:
private void btnSearch_Click(object sender, EventArgs e)
{
if (subFormCreated)
subFormSearch.Visible = true;
else
initializeSubFormSearch();
}
private void initializeSubFormSearch()
{
subFormSearch = new SubForm(listaPersonas, actualMostrado);
subFormSearch.Show();
subFormCreated = true;
}
最后,我得到的例外是ObjectDisposedException。确切的消息类似于(我不知道我的翻译是否正确)ObjectDisposedException was unhandled. Cannot get access to the deleted object. Name of the object: SubForm.
【问题讨论】:
-
请显示确切的代码和确切的异常消息。
标签: c# formclosing