2017-02-08 7 views
0
private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
     { 
      if (MessageBox.Show("Are you sure you want to exist ?", 
         "Are you sure you want to exist ?", 
         MessageBoxButtons.YesNo, 
         MessageBoxIcon.Information) == DialogResult.No) 
      { 
       e.Cancel = true; 
       Application.Exit(); 
      } 
     } 

[はい]をクリックすると、それが存在します。しかし、いいえをクリックした場合、メッセージは再び表示され、2回目のときには、そのメッセージは表示されません。なぜいいえ、それを2回尋ねているのですか?

私はbackgroundworkerと私が更新するrichTextViewを持っています。 e.Cancel = true、application.exitで十分ですか?

+1

閉じるのではなく、閉じたいと思っています。あなたの心を作りなさい。 – LarsTech

+8

「本当に存在しますか?」さあ、それは厳しいです。 – itsme86

+6

これで、ユーザーが終了したいかどうかを尋ねるのですが、「いいえ」と答えると終了しますか? (つまり、 'Application.Exit();'経由で)? –

答えて

6

あなたのロジックは正しくありません。あなたが選んだ内容に応じて、これらのアクションのいずれかを実行する必要があり、両方を実行する必要はありません。

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (MessageBox.Show("Are you sure you want to exit ?", 
       "Are you sure you want to exit ?", 
       MessageBoxButtons.YesNo, 
       MessageBoxIcon.Information) == DialogResult.No) 
    { 
     e.Cancel = true; // cancels the close action 
    } 
    else 
     Application.Exit(); // closes the app, this might not be necessary. Just proceeding with the form close is enough UNLESS this is not the main application form 

} 
+4

'Application.Exit()'はまったく必要ないと思います。明らかに、 'Form'は既に閉じています。 –

+1

@RenéVogt - 主なアプリの形式でない限り。私は明確にするためにコメントに加えました。 – Igor

4

あなたが "いいえ" を選択した場合は、e.Cancel = true;で現在FormClosingイベントをキャンセル。
しかし、とにかくApplication.Exit();を呼び出します。したがって、Formは再び閉じられ、FormClosingはもう一度発生します。

Application.Exit()行を削除してください。すべて正常に動作します。

関連する問題