[Windows] ダイアログのキャンセルを考慮する

「開く」ダイアログを表示してもユーザは必ず「開く」ボタンを押すわけではありません。「キャンセル」ボタンを押す可能性もあれば、左上の「×」ボタンを押し、処理をキャンセルするかもしれません。ここでは「開く」コモンダイアログがキャンセルされた場合の考慮を実装します。
広 告
目次
前提条件
- 「「開く」機能を実装する」が実施済であること
動作確認環境
- Windows10 64bit
- Visual Studio Express 2015 for Windows Desktop
1. キャンセルされた場合の考慮を実装する

前回作成したダイアログで「キャンセル」ボタンを押すとエラー(例外)が発生します。

エラーのダイアログは「継続」ボタンを押すと消すことができます。
このエラーは、System.IO.File.ReadAllText()
メソッドが「System.ArgumentException
」(引数例外)を発生させていることが原因になります。
前回実装したダイアログ表示処理
private void MenuItemFileOpen_Click(object sender, EventArgs e) { OpenFileDialog.FileName = ""; OpenFileDialog.ShowDialog(); LoadFile(OpenFileDialog.FileName); } private void LoadFile(string value) { textBox.Text = System.IO.File.ReadAllText( value, Encoding.GetEncoding("Shift_JIS")); }
ダイアログでキャンセルボタンを押されるとOpenFileDialog.FileName
の値に何も設定されないため、そのままLoadFile()
メソッドに渡していることがまずいわけです。
LoadFile()
メソッドは、「開く」ボタンがクリックされた場合のみ実行されるべきなので、MenuItemFileOpen_Click()
メソッドの処理は以下のように修正すべきです。
「キャンセル」ボタンを押されたときを考慮した実装
private void MenuItemFileOpen_Click(object sender, EventArgs e) { OpenFileDialog.FileName = ""; if (DialogResult.OK == OpenFileDialog.ShowDialog()) { // 「開く」ボタンがクリックされたとき LoadFile(OpenFileDialog.FileName); } }
OpenFileDialog.ShowDialog()
メソッドは、「開く」ボタンを押した場合にDialogResult.OK
を返します。上記のコードでは、その条件を満たしたときだけLoadFile()
メソッドを呼び出しています。
以上が、「キャンセル」ボタンが押された場合を考慮した実装の説明になります。
2. プログラムを実行して結果を確認する
これまでの手順の実行結果は以下の通りです。

「キャンセル」ボタンを押してもエラーが発生しないことが確認できます。
次は「「名前を付けて保存」機能を実装する」です。