2011-12-03 85 views
7

問題是,「確定要關閉嗎?」的消息框?會彈出,但是當我點擊「否」時,它仍然繼續關閉程序。有什麼建議麼? 這裏是我的代碼:單擊「X」按鈕時要求確認

protected override void OnFormClosing(FormClosingEventArgs e) 
    { 
     CloseCancel(); 
    } 

    public static void CloseCancel() 
    { 
     const string message = "Are you sure that you would like to cancel the installer?"; 
     const string caption = "Cancel Installer"; 
     var result = MessageBox.Show(message, caption, 
            MessageBoxButtons.YesNo, 
            MessageBoxIcon.Question); 

     if (result == DialogResult.Yes) 
      Environment.Exit(0); 
    } 

回答

20

您預計FormClosingEventArgs參數的Cancel屬性,當你需要關閉操作被取消設置爲true。並且明確的Environment.Exit(0)通常不是必需的,因爲表單正在以任何方式關閉(取消關閉過程是選擇加入,而不是選擇退出)。

替換最後一位:

var result = MessageBox.Show(message, caption, 
          MessageBoxButtons.YesNo, 
          MessageBoxIcon.Question); 

e.Cancel = (result == DialogResult.No); 
6

e.Cancel上的FormClosing事件將停止關閉過程

protected override void OnFormClosing(FormClosingEventArgs e) 
    { 
     if (CloseCancel()==false) 
     { 
      e.Cancel = true; 
     }; 
    } 

    public static bool CloseCancel() 
    { 
     const string message = "Are you sure that you would like to cancel the installer?"; 
     const string caption = "Cancel Installer"; 
     var result = MessageBox.Show(message, caption, 
            MessageBoxButtons.YesNo, 
            MessageBoxIcon.Question); 

     if (result == DialogResult.Yes) 
      return true; 
     else 
      return false; 
    } 
1
protected Boolean CanClose(Boolean CanIt) 
{ 
    if(MessageBox.Show("Wanna close?", "Cancel Installer", MessageBoxButtons.YesNo,  MessageBoxIcon.Question).ShowDialog() == DialogResult.Yes) 
    { 
     // Yes, they want to close. 
     CanIt = true; 
    } 
    else 
    { 
    // No, they don't want to close. 
    CanIt = false; 
    } 

    return CanIt; 
} 

protected override void OnFormClosing(FormClosingEventArgs e) 
{ 
    if(CanClose(false) == true) 
    { 
     this.Dispose(true); 
    } 
    else 
    { 
     e.Cancel = true; 
    } 
} 

我不確定如何處理其他方案你提到(處理'X'點擊)。也許你可以做這樣的事情(僞代碼):

// IF CLICKED YES 
    THEN CLOSE 
// ELSE-IF CLICKED NO 
    THEN DO NOTHING 
// ELSE 
    THEN DO NOTHING 
+0

這就是它,但你是過分的東西。爲什麼'CanClose(false)'而不是'CanClose()'? – Otiel

+0

試過了,你不需要CanClose()方法中的參數,恭喜第一個答案 –

2

只是把它簡單

protected override void OnFormClosing(FormClosingEventArgs e) 
     {    
      base.OnFormClosing(e); 
      if (PreClosingConfirmation() == System.Windows.Forms.DialogResult.Yes) 
      { 
       Dispose(true); 
       Application.Exit(); 
      } 
      else 
      { 
       e.Cancel = true; 
      } 
     } 

     private DialogResult PreClosingConfirmation() 
     { 
      DialogResult res = System.Windows.Forms.MessageBox.Show(" Do you want to quit?   ", "Quit...", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
      return res; 
     } 
0

現在的問題是舊的,但這種方式是比較簡單的,短的,我覺得還可以對於那些誰這個頁面上到達有用:

protected override void OnFormClosing(FormClosingEventArgs e) 
{ 
    if (MessageBox.Show("Are you sure that you would like to cancel the installer?", "Cancel Installer", MessageBoxButtons.YesNo) == DialogResult.No) 
    { 
     e.Cancel = true; 
    } 
} 

,並在其他地方使用this.Close()而不是函數。