ユーザーが終了アイコンをクリックするか、ALT + F4を使用してアプリケーションを終了する場合は、ユーザーが本当に終了するかどうかを確認するダイアログボックスを作成します。
アプリケーションが実際に閉じられる前に、このイベントをキャプチャするにはどうすればよいですか?
フォームの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.Yes
にDialogResult.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;
}
}
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;
}
状況によっては、この種の処理でユーザーを悩ませるのは必ずしも良いことではありません。
貴重な変更されたデータがあり、変更を失うリスクを望まない場合は、常にそれを行うのは良いことですが、これをクローズアクションの確認としてのみ使用する場合は、何もしない方がよいでしょう。
Form_Closing
このためのまたはForm_Closed
イベントを処理できます。
Visual Studioで、稲妻アイコンをクリックし、フォームのプロパティリストでこれらのイベントまでスクロールダウンします。必要なものをダブルクリックすると、イベントがフックされます。
これは1つの形式ですか?その場合は、FormClosing
イベントを使用してキャンセルすることができます(ダイアログを表示しCancelEventArgs.Cancel
、ユーザーが終了をキャンセルすることを選択した場合はtrueに設定します)。
あなたが話しているなら、あなたのメインウィンドウ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;
}
}
}