怎么知道窗体是采用何种方式关闭的?
请问在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的那么自己来加标识了.