[Windows] 未編集の場合は確認ダイアログを表示しない

前回はアプリケーションを終了させる前に確認ダイアログを表示する実装をしました。しかし、テキスト内容が未編集である場合はダイアログを表示する必要がありません。ここでは終了確認ダイアログ表示を判定する処理を実装します。
広 告
目次
前提条件
- 「終了前に確認ダイアログを表示する」が実施済であること
動作確認環境
- Windows10 64bit
- Visual Studio Express 2015 for Windows Desktop
1. 終了確認ダイアログ表示を判定する
テキスト内容が未編集である場合は、アプリケーションを終了させても失われるデータがありません(データが保存済、もしくは元々データがないため)。
つまりアプリケーションを終了させても、再起動後に終了前の状態に戻すことが可能であるため、終了時にわざわざユーザに対して終了の確認をさせる必要がないということです。
確認ダイアログを表示するかどうかは、今の状態が「編集中」か「未編集」かで判定できます。この2つの状態は、「変更があるかをタイトルバーに表示する」で利用したEdited
の値で判定できます。Edited
はUpdateStatus()
メソッド内でしか利用できない変数であるため、この値をクラス全体で利用できるようにするために、Form1
クラス配下に宣言します(名前は同じですが別の変数として宣言します)。
EditedをForm1クラス直下に宣言する
public partial class Form1 : Form { ... // 編集状態 private bool Edited = false; ... }
「編集中」をtrue
「未編集」をfalse
として扱い、初期値はfalse
を設定しています。
クラス直下に宣言したEdited
に対して、UpdateStatus()
メソッドの中で値を設定するように変更します。
クラス直下のEditedに値を設定する
// アプリの状態を更新する private void UpdateStatus(string Name, bool Edited) { // ファイル名を保持する this.FileName = Name; // 編集状態を保持する this.Edited = Edited; // タイトルバー表示名 string title = ApplicationName; // 以降の処理に変更なし ... }
これでテキストボックスが編集中(テキスト内容に変更がある)か未編集なのかをクラス直下のEdited
で判定できるようになりました。
終了確認ダイアログを表示する直前にEdited
による判定処理を追加します。
未編集の場合は終了確認ダイアログを表示しない
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (!Edited) { // テキストが「未編集」の場合はそのまま終了 return; } DialogResult result = MessageBox.Show("編集内容を破棄しますか?", ApplicationName, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); if (DialogResult.OK != result) { // 「はい」以外が選択された場合は // アプリケーション終了をキャンセルする e.Cancel = true; } }
「未編集」(テキスト内容に変更がない)の場合は、確認ダイアログを表示する前に処理を終了させてしまいます。
アプリケーション終了確認ダイアログを表示するかを判定する実装は以上です。
2. プログラムを実行して結果を確認する
これまでの手順の実行結果は以下の通りです。

「編集中」の場合にウィンドウ右上の「×」ボタンをクリックすると、上図のとおり終了確認ダイアログが表示されますが、「未編集」の場合は何も表示されず、そのままアプリケーションが終了します。
次は「ファイルを「開く」前に終了確認をする」です。