程序需要判断窗体是由代码关闭还是通过点击右上角上X号关闭 FormCloseing事件中e.CloseReason可以获取关闭原因 CloseReason枚举如下:
None 关闭原因未定义或未能确定 WindowsShutDown操作系统正在关闭所有应用程序以便准备关机 MdiFormClosing此多文档界面(UI)窗体的父窗体正在关闭 userClosing 用户正在通过用户界面(UI)关闭该窗体,例如通过单击窗体“X”关闭按钮,通过调用this.Close(),或通过Alt+F4等方式关闭。 TaskManagerClosing Windows任务管理器正在关闭程序 FormOwnerClosing 所有者窗体正在关闭 ApplicatonExitCall Applicaton类的Exit方法被调用。
this.close和点击“X”按钮的CloseReason是一样的,现在要区分this.close和点击“X”号怎么办呢? 使用消息,代码如下:
protected override void WndProc(ref Message msg) { const int WM_SYSCOMMAND = 0x0112; const int SC_CLOSE = 0xF060; if (msg.Msg == WM_SYSCOMMAND && ((int)msg.WParam == SC_CLOSE)) { // 点击winform右上关闭按钮 // 加入想要的逻辑处理 Application.Exit(); } base.WndProc(ref msg); }
|