我有一个表单(让我们称之为父表单),从中可以加载另一个“始终在顶部但不是模态”的表单(如对话框但不是对话框 - 用户可以将新的“子表单”保留在其中是并继续在父表格上工作)。
用户第一次打开该子窗体时,会加载并显示某些数据。如果它们关闭表单,我实际上是拦截关闭并简单地隐藏表单 - 这样下次打开它时,我们就不必重新加载数据(如果有的话,数据不会发生很大的变化)。
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
this.Hide();
}
稍后,当父窗体关闭时,我想强制子窗体正确关闭 - 在它的基本窗体中运行一些代码以存储其下一次的位置和大小。
目前我从父表单中调用 childForm.Dispose(),这样可以很好地清理,但不会给我太多控制权。
但是,如果我调用childForm.Close()方法,则e.CloseReason仍为“CloseReason.UserClosing”。
有没有办法区分关闭表单的用户和关闭它的代码(在父表单中)?
答案 0 :(得分:2)
只需添加一个特殊的“ReallyClose()
”方法进行清理,并在您确实要关闭表单时调用。