自動感知窗體的關閉事件
有些時候當程式退出時,可能需要做一些善後處理工作。.Net框架為我們提供了非常豐富及方便的窗體關閉檢測手段,我們只要捕獲這些相關事件,然後對應處理即可,從而達到不同原因關閉窗體採取不同操作的目的。
首先,建立一個預設的Windows Form. Application,我們需要過載Form基類的OnClosing事件,然後獲取窗體關閉事件的引數資訊,即FormClosingEventArgs類的例項,根據關閉窗體的不同原因,即FormClosingEventArgs類的CloseReason屬性,提示使用者作出相應處理。Form1.cs的全部原始碼如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static bool ShowMessage(string s)
{
DialogResult result = MessageBox.Show(s + "\n\n確定要關閉窗體嗎?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
return result == DialogResult.No;
}
protected override void OnClosing(CancelEventArgs e)
{
FormClosingEventArgs fce = e as FormClosingEventArgs;
if (fce != null)
{
switch (fce.CloseReason)
{
case CloseReason.ApplicationExitCall:
e.Cancel = Form1.ShowMessage("程式正準備退出!");
break;
case CloseReason.FormOwnerClosing:
e.Cancel = Form1.ShowMessage("主窗體正在關閉!");
break;
case CloseReason.MdiFormClosing:
e.Cancel = Form1.ShowMessage("MDI主窗體正在試圖關閉!");
break;
case CloseReason.None:
e.Cancel = Form1.ShowMessage("正在關閉窗體,但原因未知!");
break;
case CloseReason.TaskManagerClosing:
e.Cancel = Form1.ShowMessage("工作管理員正在試圖關閉窗體並終止程式!");
break;
case CloseReason.UserClosing:
e.Cancel = Form1.ShowMessage("使用者正在試圖關閉窗體!");
break;
case CloseReason.WindowsShutDown:
e.Cancel = Form1.ShowMessage("Windows 正在關閉,並嘗試關閉窗體!");
break;
}
}
base.OnClosing(e);
}
}
}
在事件結尾不要忘記新增對基類的OnClosing()的呼叫,以保證類的完整性!
更多關於.Net下偵測窗體關閉及關閉原因的內容,請參考用於Visual Studio 2008 的MSDN:
該示例在Windows XP SP3 + Visual Studio 2008 SP1 下編譯除錯透過。
首先,建立一個預設的Windows Form. Application,我們需要過載Form基類的OnClosing事件,然後獲取窗體關閉事件的引數資訊,即FormClosingEventArgs類的例項,根據關閉窗體的不同原因,即FormClosingEventArgs類的CloseReason屬性,提示使用者作出相應處理。Form1.cs的全部原始碼如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static bool ShowMessage(string s)
{
DialogResult result = MessageBox.Show(s + "\n\n確定要關閉窗體嗎?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
return result == DialogResult.No;
}
protected override void OnClosing(CancelEventArgs e)
{
FormClosingEventArgs fce = e as FormClosingEventArgs;
if (fce != null)
{
switch (fce.CloseReason)
{
case CloseReason.ApplicationExitCall:
e.Cancel = Form1.ShowMessage("程式正準備退出!");
break;
case CloseReason.FormOwnerClosing:
e.Cancel = Form1.ShowMessage("主窗體正在關閉!");
break;
case CloseReason.MdiFormClosing:
e.Cancel = Form1.ShowMessage("MDI主窗體正在試圖關閉!");
break;
case CloseReason.None:
e.Cancel = Form1.ShowMessage("正在關閉窗體,但原因未知!");
break;
case CloseReason.TaskManagerClosing:
e.Cancel = Form1.ShowMessage("工作管理員正在試圖關閉窗體並終止程式!");
break;
case CloseReason.UserClosing:
e.Cancel = Form1.ShowMessage("使用者正在試圖關閉窗體!");
break;
case CloseReason.WindowsShutDown:
e.Cancel = Form1.ShowMessage("Windows 正在關閉,並嘗試關閉窗體!");
break;
}
}
base.OnClosing(e);
}
}
}
在事件結尾不要忘記新增對基類的OnClosing()的呼叫,以保證類的完整性!
更多關於.Net下偵測窗體關閉及關閉原因的內容,請參考用於Visual Studio 2008 的MSDN:
該示例在Windows XP SP3 + Visual Studio 2008 SP1 下編譯除錯透過。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14325734/viewspace-539740/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Javascript自動關閉視窗(轉)JavaScript
- sweetalert載入彈窗完成自動關閉
- 如何關閉 Windows 7 視窗自動排列功能?Windows
- Oracle 記憶體自動管理--關閉自動管理Oracle記憶體
- Win10系統怎麼關閉視窗自動貼靠 win10關閉自動貼靠的方法Win10
- ORACLE AS 自動關閉Oracle
- Go Qt5 建立空白視窗、視窗居中及關閉視窗事件GoQT事件
- 客戶端showModalDialog的視窗,提交後自動關閉:使用RegisterClientScriptBlock客戶端clientBloC
- Winform MessageBox訊息彈窗如何實現自動關閉ORM
- 關閉自動收集 for oracleOracle
- 彈出視窗螢幕(screen)實現關閉右上角的關閉按鈕事件(轉)事件
- windows10 自動更新怎麼關閉_關閉windows10 自動更新的方法Windows
- 應用例項:VC++實現廣告視窗自動關閉(轉)C++
- oracle自動啟動和關閉的方法Oracle
- WPF 應用程式開機自啟動及窗體關閉按鈕作用失效的解決辦法
- js微信視窗關閉事件簡單程式碼例項JS事件
- FineUI小技巧(4)關閉窗體那些事UI
- 如何關閉Win10自動更新 win10永久關閉自動更新Win10
- js關閉視窗JS
- 如何關閉win10的自動更新_關閉自動更新win10怎麼操作Win10
- filebeat自動關閉解決
- WebStorm關閉自動拆疊WebORM
- javascript層自動關閉效果JavaScript
- vps mysql自動關閉MySql
- 如何關閉Windows自動更新Windows
- MysqL自動提交機制的關閉MySql
- OpenSessionInView裡的Session不能自動關閉?SessionView
- 怎樣關閉win10自動更新 如何關閉windows10自動更新Win10Windows
- Oracle自動啟動和關閉的方法 (轉)Oracle
- WPS自動更新怎麼關閉? 詳解WPS自動更新的關閉方法步驟
- win10關閉自動更新方法永久 徹底關閉自動更新的辦法Win10
- win10怎麼關閉自動更新 win10關閉自動更新的三種方法Win10
- 資料庫自動啟動關閉資料庫
- win10系統關閉自動更新怎麼關_windows10如何關閉自動更新Win10Windows
- win10自帶防毒軟體如何關閉_關閉win10自帶防毒軟體的方法Win10防毒
- win10如何關閉自動喚醒_win10關閉自動喚醒方法Win10
- win10如何徹底關閉自動更新 win10關閉系統自動更新的教程Win10
- Win10如何關閉自動維護 win10系統關閉自動維護的方法Win10