怎么知道窗体是采用何种方式关闭的?
请问在Form的Closing事件中如何判读窗体是采用何种方式关闭的,如是用户点右上角的关闭按钮还是在程序里调用Close方法关闭.
------解决方案--------------------用户点右上角的关闭按钮-----这个事件貌似捕获不到的.
------解决方案--------------------Form.Closed 事件在用户或窗体的 Close 方法关闭该窗体后发生。
所以户点右上角的关闭按钮和在程序里调用Close方法关闭 触发Form.Closed 事件.
另外:
若要防止窗体关闭,请处理 Closing 事件,并将传递给事件处理程序的 CancelEventArgs 的 Cancel 属性设置为 true。
可以使用此事件执行一些任务,如释放窗体使用的资源,还可使用此事件保存输入窗体中的信息或更新其父窗体。
警告
当调用 Application.Exit 方法以退出应用程序时,不引发 Form.Closed 和 Form.Closing 事件。如果在必须执行的其中一个事件中有验证代码,则在调用 Exit 方法之前,应分别为每个打开的窗体调用 Form.Close 方法。
如果窗体是 MDI 父窗体,则在引发 MDI 父窗体的 Closing 事件之前将引发所有 MDI 子窗体的 Closing 事件。另外,在引发 MDI 父窗体的 Closed 事件之前,将引发所有 MDI 子窗体的 Closed 事件。
来字MSDN
------解决方案--------------------似乎直接在FormClosing事件是没有可能的 建议加上一个标记变量 在程序调用this.Close()的代码前将这个标记变量赋值 在Closing事件就检查这个标记 如果没有被赋值 可能是点了关闭按钮
------解决方案--------------------只有在FormClosing自己记录,
------解决方案--------------------请重写方法OnFormClosing
或清加事件FormClosing,
不论哪一个,都会有一个类型为FormClosedEventArgs的参数e
e.CloseReason就是关闭的参数了.
------解决方案--------------------个人觉得在窗体代码中使用重写的方法是首选方法,比如:
protected override void OnFormClosed(FormClosedEventArgs e)
{
Console.WriteLine(e.CloseReason);
base.OnFormClosed(e);
}
------解决方案--------------------同意 Macosx(结贴)
to 用户点右上角的关闭按钮还是在程序里调用Close方法关闭
这两个动作都会引发closing事件
------解决方案--------------------同意 Macosx(结贴)
to 用户点右上角的关闭按钮还是在程序里调用Close方法关闭
这两个动作都会引发closing事件
-----------------------------------------
我是不同意的,
虽然Closing事件里不能知道,但是我上面说了,在FormClosing事件里是知道的,因为这个事件有一个FormClosedEventArgs类型的参数,参数的CloseReason就能说明窗体是怎么关闭的.
但是在窗体代码里首选的是重写方法,所以应重写OnFormClosing方法来得到这个关闭的原因.
------解决方案--------------------如果是1.1的那么自己来加标识了.