2011-12-03 16 views
7

問題は、「確かに閉じたいですか?」というメッセージボックスです。ポップアップが表示されますが、「いいえ」をクリックすると、プログラムを終了します。助言がありますか?あなたがキャンセルされるクローズ操作を必要とする場合trueFormClosingEventArgs引数のCancelプロパティを設定することが期待されている「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

: はここに私のコードです。明示的にEnvironment.Exit(0)です。フォームが途中で閉鎖されているため(シャットダウンプロセスのキャンセルはオプトインでオプトインではないため)、通常は不要です。

と最後のビットを交換してください:FormClosingイベントに

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

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

e.Cancelは、私は他のシナリオを処理する方法がわからないんだ

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'クリックを扱います)。ちょうど質問は今古いですが、この方法は、よりシンプルで短いです、と私はそれができると思う、それ簡単な

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

これはそれですが、あなたは過酷なことをしています。 'CanClose()'ではなく 'CanClose(false) 'を使うのはなぜですか? – Otiel

+0

うまくいけば、CanClose()メソッドで引数を必要とせず、最初の答えをおめでとう –

2

:たぶん、あなたはこの(擬似コード)のような何かを行うことができます

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()を使用する:このページに到着した人には便利。

0

を取る

// IF CLICKED YES 
    THEN CLOSE 
// ELSE-IF CLICKED NO 
    THEN DO NOTHING 
// ELSE 
    THEN DO NOTHING 
関連する問題