我有一个表单,其中有一个名为“搜索”的按钮。当我单击它时,会打开另一个表单来搜索项目。当用户在第二种形式中单击 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.