程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> winform攔阻封閉按鈕觸發的事宜示例

winform攔阻封閉按鈕觸發的事宜示例

編輯:C#入門知識

winform攔阻封閉按鈕觸發的事宜示例。本站提示廣大學習愛好者:(winform攔阻封閉按鈕觸發的事宜示例)文章只能為提供參考,不一定能成為您想要的結果。以下是winform攔阻封閉按鈕觸發的事宜示例正文


用戶封閉軟件時,軟件普通會給“能否確認封閉”的提醒。平日,我們把它寫在FormClosing 事宜中,假如肯定封閉,就封閉;不然把FormClosingEventArgs 的 Cancel 屬性設置為 true,就撤消了該窗體的封閉。

假如該窗體是主窗體,我們想在該窗體封閉時封閉全部運用法式,會碰到至多兩種情形:

(1)該窗體同時是啟動窗體,即它是運用法式中一切窗體的父類,則全部運用法式會被封閉。

(2)假如該窗體不是啟動窗體,好比我們做了一個迎接窗體,則運用法式中一切窗體的父類就是這個迎接窗體了。這時候該窗體的封閉其實不會封閉全部運用法式。我們須要再參加“Application.Exit()”這行代碼來加入運用法式。但同時又有成績了,父窗體的封閉又會給該窗體發送封閉事宜,因而該事宜又被挪用一次,確認對話框又會彈出第二次。處理辦法是用上面的代碼:

注:做迎接體界面可以在主窗體中,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# 窗體封閉時可以觸發的事宜

FormClosing :在窗體封閉時,FormClosing 事宜產生。窗體封閉時,此事宜會獲得處置,從而釋放與此窗體聯系關系的一切資本。假如撤消此事宜,則該窗體堅持翻開狀況。若要撤消窗體的封閉操作,請將傳遞給事宜處置法式的 FormClosingEventArgs 的 Cancel 屬性設置為 true。

FormClosed:在用戶或 Application 類的 Close 辦法或 Exit 辦法封閉窗體後,會產生 FormClosed 事宜。若要避免窗體封閉,請處置 FormClosing 事宜,並將傳遞給事宜處置法式的 CancelEventArgs 的 Cancel 屬性設置為 true。可使用此事宜履行一些義務,如釋放窗體應用的資本,還可以使用此事宜保留輸出窗體中的信息或更新其父窗體。

當窗體顯示為形式對話框時,單擊“封閉”按鈕(窗體右上角帶 X 的按鈕)會隱蔽窗體並將 DialogResult 屬性設置為 DialogResult.Cancel。經由過程在窗體的 FormClosing 事宜的事宜處置法式中設置 DialogResult 屬性,可以在用戶單擊“封閉”按鈕時重寫分派給 DialogResult 屬性的值。

留意

在顯示為無形式窗口的 Form 上挪用 Close 辦法時,不克不及挪用 Show 辦法使窗體可見,由於窗體的資本已被釋放。若要隱蔽窗體然後又使其可見,請應用 Hide 辦法。

假如窗體是多文檔界面 (MDI) 父窗體,則在激發 MDI 父窗體的 FormClosing 事宜之前將激發一切 MDI 子窗體的 FormClosing 事宜。異樣,在激發 MDI 父窗體的 FormClosed 事宜之前,將激發一切 MDI 子窗體的 FormClosed 事宜。撤消 MDI 子窗體的 FormClosing 事宜不克不及避免激發 MDI 父窗體的 FormClosing 事宜。然則,撤消該事宜會將作為參數傳遞給父窗體的 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; 
     } 
 }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved