欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

winform攔截關閉按鈕觸發(fā)的事件示例

 更新時間:2014年01月21日 11:21:37   作者:  
這篇文章主要介紹了c# winform攔截關閉按鈕觸發(fā)的事件示例,大家參考使用吧

用戶關閉軟件時,軟件一般會給“是否確認關閉”的提示。通常,我們把它寫在FormClosing 事件中,如果確定關閉,就關閉;否則把FormClosingEventArgs 的 Cancel 屬性設置為 true,就取消了該窗體的關閉。

如果該窗體是主窗體,我們想在該窗體關閉時關閉整個應用程序,會遇到至少兩種情況:

(1)該窗體同時是啟動窗體,即它是應用程序中所有窗體的父類,則整個應用程序會被關閉。

(2)如果該窗體不是啟動窗體,比如我們做了一個歡迎窗體,則應用程序中所有窗體的父類就是這個歡迎窗體了。這時該窗體的關閉并不會關閉整個應用程序。我們需要再加入“Application.Exit()”這行代碼來退出應用程序。但同時又有問題了,父窗體的關閉又會給該窗體發(fā)送關閉事件,于是該事件又被調(diào)用一次,確認對話框又會彈出第二次。解決方法是用下面的代碼:

注:做歡迎體界面可以在主窗體中,ShowDialog方法打開歡迎界面,而不是把歡迎界面作為啟動窗體。下面的方法僅有理論意義。

復制代碼 代碼如下:

 protected override void WndProc(ref Message m)
{
    //Console.WriteLine(m.Msg);
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_CLOSE = 0xF060;
    if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)
    {
        //捕捉關閉窗體消息
        //用戶點擊關閉窗體控制按鈕   注釋為最小化窗體  
        //this.WindowState = FormWindowState.Minimized;

        //窗體隱藏
        this.Hide();
        return;
    }
    base.WndProc(ref m);
}

C# 窗體關閉時可以觸發(fā)的事件

FormClosing :在窗體關閉時,F(xiàn)ormClosing 事件發(fā)生。窗體關閉時,此事件會得到處理,從而釋放與此窗體關聯(lián)的所有資源。如果取消此事件,則該窗體保持打開狀態(tài)。若要取消窗體的關閉操作,請將傳遞給事件處理程序的 FormClosingEventArgs 的 Cancel 屬性設置為 true。

FormClosed:在用戶或 Application 類的 Close 方法或 Exit 方法關閉窗體后,會發(fā)生 FormClosed 事件。若要防止窗體關閉,請?zhí)幚?FormClosing 事件,并將傳遞給事件處理程序的 CancelEventArgs 的 Cancel 屬性設置為 true??梢允褂么耸录?zhí)行一些任務,如釋放窗體使用的資源,還可使用此事件保存輸入窗體中的信息或更新其父窗體。

當窗體顯示為模式對話框時,單擊“關閉”按鈕(窗體右上角帶 X 的按鈕)會隱藏窗體并將 DialogResult 屬性設置為 DialogResult.Cancel。通過在窗體的 FormClosing 事件的事件處理程序中設置 DialogResult 屬性,可以在用戶單擊“關閉”按鈕時重寫分配給 DialogResult 屬性的值。

注意

在顯示為無模式窗口的 Form 上調(diào)用 Close 方法時,不能調(diào)用 Show 方法使窗體可見,因為窗體的資源已被釋放。若要隱藏窗體然后又使其可見,請使用 Hide 方法。

如果窗體是多文檔界面 (MDI) 父窗體,則在引發(fā) MDI 父窗體的 FormClosing 事件之前將引發(fā)所有 MDI 子窗體的 FormClosing 事件。同樣,在引發(fā) MDI 父窗體的 FormClosed 事件之前,將引發(fā)所有 MDI 子窗體的 FormClosed 事件。取消 MDI 子窗體的 FormClosing 事件不能防止引發(fā) MDI 父窗體的 FormClosing 事件。但是,取消該事件會將作為參數(shù)傳遞給父窗體的 FormClosingEventArgs 類的 Cancel 屬性設置成 false。要強制關閉所有 MDI 父窗體和子窗體,請將 MDI 父窗體中的 Cancel 屬性設置成 false。

下面一個簡單例子:

復制代碼 代碼如下:

 private void Form2_FormClosing(object sender, FormClosingEventArgs e) 
 { 
     DialogResult result = MessageBox.Show("你確定要關閉嗎!", "提示信息", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); 
     if (result == DialogResult.OK) 
     { 
e.Cancel = false;  //點擊OK
     } 
     else
     { 
e.Cancel = true; 
     } 
 }

相關文章

  • 關于C#數(shù)強轉(zhuǎn)會不會拋出異常詳解

    關于C#數(shù)強轉(zhuǎn)會不會拋出異常詳解

    這篇文章主要給大家介紹了關于C#數(shù)強轉(zhuǎn)會不會拋出異常的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-04-04
  • 利用FlubuCore用C#來寫DevOps腳本的方法詳解

    利用FlubuCore用C#來寫DevOps腳本的方法詳解

    這篇文章主要介紹了利用FlubuCore用C#來寫DevOps腳本的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • C#下使用XmlDocument操作XML詳解

    C#下使用XmlDocument操作XML詳解

    本文詳細講解了C#使用XmlDocument操作XML的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#的FileSystemWatcher用法實例詳解

    C#的FileSystemWatcher用法實例詳解

    這篇文章主要介紹了C#的FileSystemWatcher用法,以實例形似詳細分析了FileSystemWatcher控件主要功能,并總結(jié)了FileSystemWatcher控件使用的技巧,需要的朋友可以參考下
    2014-11-11
  • 服務器端C#實現(xiàn)的CSS解析器

    服務器端C#實現(xiàn)的CSS解析器

    服務器端C#實現(xiàn)的CSS解析器
    2008-09-09
  • C#線程定義和使用方法詳解

    C#線程定義和使用方法詳解

    這篇文章主要介紹了C#Thread類的基本用法,如何定義一個線程類,為線程傳遞參數(shù)的方法,詳解看下文
    2013-11-11
  • C#實現(xiàn)收發(fā)郵件功能

    C#實現(xiàn)收發(fā)郵件功能

    這篇文章介紹了C#實現(xiàn)收發(fā)郵件功能的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 測試框架nunit之a(chǎn)ssertion斷言使用詳解

    測試框架nunit之a(chǎn)ssertion斷言使用詳解

    NUnit是.Net平臺的測試框架,廣泛用于.Net平臺的單元測試和回歸測試中,下面我們用示例詳細學習一下他的使用方法
    2014-01-01
  • C#獲取本機IP地址(ipv4)

    C#獲取本機IP地址(ipv4)

    本文主要介紹了C#獲取本機所有IP地址的方法、C#獲取本機IP地址(ipv4)的方法等。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • C#多線程系列之手動線程通知

    C#多線程系列之手動線程通知

    本文詳細講解了C#多線程中的手動線程通知,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02

最新評論