[Windows] ファイルを「開く」前に終了確認をする

「開く」メニューをクリックして新たにファイルを開くと、編集中のテキスト内容が破棄されてしまいます。そのため入力中のテキストが未保存の場合は、現在の編集内容への終了確認ダイアログを表示させるべきです。ここでは「開く」メニュークリック時にテキストが未保存の場合は終了確認ダイアログを表示する実装をします。
広 告
目次
前提条件
- 「未編集の場合は確認ダイアログを表示しない」が実施済であること
動作確認環境
- Windows10 64bit
- Visual Studio Express 2015 for Windows Desktop
1. 終了確認ダイアログ表示処理をメソッドとして実装する
前回はアプリケーションを終了直前に終了確認ダイアログを表示しました。
今回は「開く」メニュークリックした後に、必要に応じて終了確認ダイアログを表示する実装します。
この2つのダイアログは同じダイアログであるため、実装するソースコードも同じです。同じ実装は、メソッドとして処理を切り出し、それを呼び出す形にするべきです。
終了確認ダイアログ表示処理するメソッドを以下のように実装します。
終了確認ダイアログ表示メソッド
private bool ShowDiscardDialog() { // ダイアログ表示 DialogResult result = MessageBox.Show("編集内容を破棄しますか?", ApplicationName, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); if (DialogResult.OK == result) { // 「OK」 return true; } else { // 「OK」以外 return false; } }
「OK」ボタンがクリックされたらtrue
を返し、「キャンセル」ボタンや「×」ボタンがクリックされた場合はfalse
を返します。
Form1_FormClosing()
メソッドは以下のようにShowDiscardDialog()
メソッドを呼び出す実装に変更します。
アプリケーション終了直前の処理
// アプリケーション終了直前 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (!Edited) { // テキストが「未編集」の場合はそのまま終了 return; } // 終了確認ダイアログを表示 bool result = ShowDiscardDialog(); if (!result) { // 「はい」以外が選択された場合は // アプリケーション終了をキャンセルする e.Cancel = true; } }
2. ファイルを「開く」前に終了確認をする
ファイルを「開く」前に終了確認ダイアログを表示するのは、テキストが「編集中(未保存)」の場合です。
「開く」メニューをクリックした時の動作として、MenuItemFileOpen_Click()メソッドに以下の実装をします。
「開く」メニュークリック時の実装
private void MenuItemFileOpen_Click(object sender, EventArgs e) { if (Edited) { // テキストが「編集中」 // 終了確認ダイアログを表示 bool result = ShowDiscardDialog(); if (!result) { // 「OK」ボタン以外がクリックされた場合は処理を中断 return; } } OpenFileDialog.FileName = ""; if (DialogResult.OK == OpenFileDialog.ShowDialog()) { // 「開く」ボタンがクリックされたとき LoadFile(OpenFileDialog.FileName); } }
テキストが「編集中(未保存)」の場合のみ終了確認ダイアログを表示します。終了確認ダイアログの中で「OK」ボタンがクリックされた時のみ、その後に「開く」ダイアログを表示するようにします。
3. プログラムを実行して結果を確認する
これまでの手順の実行結果は以下の通りです。

「未編集」状態で「開く」メニューをクリックすると、

そのまま「開く」ダイアログを表示されます。

「編集中」状態で「開く」メニューをクリックすると、

終了確認ダイアログが表示されます。
そこで「OK」ボタンをクリックした時のみ、

「開く」ダイアログが表示されます。