如何确定表单是由用户还是代码关闭?

时间:2009-07-24 06:18:03

标签: c# winforms

我有一个表单(让我们称之为父表单),从中可以加载另一个“始终在顶部但不是模态”的表单(如对话框但不是对话框 - 用户可以将新的“子表单”保留在其中是并继续在父表格上工作)。

用户第一次打开该子窗体时,会加载并显示某些数据。如果它们关闭表单,我实际上是拦截关闭并简单地隐藏表单 - 这样下次打开它时,我们就不必重新加载数据(如果有的话,数据不会发生很大的变化)。

if (e.CloseReason == CloseReason.UserClosing)
{
    e.Cancel = true;
    this.Hide();
}

稍后,当父窗体关闭时,我想强制子窗体正确关闭 - 在它的基本窗体中运行一些代码以存储其下一次的位置和大小。

目前我从父表单中调用 childForm.Dispose(),这样可以很好地清理,但不会给我太多控制权。

但是,如果我调用childForm.Close()方法,则e.CloseReason仍为“CloseReason.UserClosing”。

有没有办法区分关闭表单的用户和关闭它的代码(在父表单中)?

1 个答案:

答案 0 :(得分:2)

只需添加一个特殊的“ReallyClose()”方法进行清理,并在您确实要关闭表单时调用。