12

ユーザーが終了アイコンをクリックするか、ALT + F4を使用してアプリケーションを終了する場合は、ユーザーが本当に終了するかどうかを確認するダイアログボックスを作成します。

アプリケーションが実際に閉じられる前に、このイベントをキャプチャするにはどうすればよいですか?

4

6 に答える 6

22

フォームのOnClosingイベントを確認してください。

そのリンクからの抜粋は、実際にテキストフィールドの変更をチェックし、保存を促します。

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
   // Determine if text has changed in the textbox by comparing to original text.
   if (textBox1.Text != strMyOriginalText)
   {
      // Display a MsgBox asking the user to save changes or abort.
      if(MessageBox.Show("Do you want to save changes to your text?", "My Application",
         MessageBoxButtons.YesNo) ==  DialogResult.Yes)
      {
         // Cancel the Closing event from closing the form.
         e.Cancel = true;
         // Call method to save file...
      }
   }
}

必要に応じてテキストを変更できます。また、テキストDialogResult.YesDialogResult.No基づいてに切り替えることもできます。


これがあなたのためだけに修正されたコードです:

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
   if(MessageBox.Show("Are you sure you want to quit?", "My Application", MessageBoxButtons.YesNo) ==  DialogResult.No)
   {
      e.Cancel = true;
   }
}
于 2012-06-15T08:55:00.820 に答える
13

Form_Closingイベントをサブスクライブする必要
があります。そこにダイアログボックスを投稿し、ユーザーが終了を中止する場合は、FormCloseEventArgs.Cancelをtrueに設定します。

たとえば、Form_Loadで、またはデザイナを使用して、イベントをサブスクライブします

Form1.FormClosing += new FormClosingEventHandler(Form1_Closing);

....
private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
{
    DialogResult d = MessageBox.Show("Confirm closing", "AppTitle", MessageBoxButtons.YesNo );
    if(d == DialogResult.No)
        e.Cancel = true;
}

状況によっては、この種の処理でユーザーを悩ませるのは必ずしも良いことではありません。
貴重な変更されたデータがあり、変更を失うリスクを望まない場合は、常にそれを行うのは良いことですが、これをクローズアクションの確認としてのみ使用する場合は、何もしない方がよいでしょう。

于 2012-06-15T08:56:05.837 に答える
3

Form_ClosingこのためのまたはForm_Closedイベントを処理できます。

Visual Studioで、稲妻アイコンをクリックし、フォームのプロパティリストでこれらのイベントまでスクロールダウンします。必要なものをダブルクリックすると、イベントがフックされます。

于 2012-06-15T08:55:48.497 に答える
1

msdnサンプルを読む:http://msdn.microsoft.com/en-us/library/system.windows.forms.form.closing.aspx

于 2012-06-15T08:55:00.227 に答える
1

これは1つの形式ですか?その場合は、FormClosingイベントを使用してキャンセルすることができます(ダイアログを表示しCancelEventArgs.Cancel、ユーザーが終了をキャンセルすることを選択した場合はtrueに設定します)。

于 2012-06-15T08:55:05.977 に答える
0

あなたが話しているなら、あなたのメインウィンドウwindows formsを捕まえるのに十分なはずです

FormClosingイベント。閉じないようにする場合は、発生したイベントハンドラーの引数をに設定するだけtrueです。

例:

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{

      if(MessageBox.Show("Do you really want to exit?", "My Application",
         MessageBoxButtons.YesNo) ==  DialogResult.No){

                // SET TO TRUE, SO CLOSING OF THE MAIN FORM, 
                // SO THE APP ITSELF IS BLOCKED
                e.Cancel = true;            
      }
   }
}
于 2012-06-15T08:57:17.363 に答える