[Windows] 保存機能の有効・無効を切り替える

ユーザがテキストボックスの内容を変更していなければ、それを保存する必要がありません。また保存データがない場合も保存する必要がありません。ここではテキストボックスの内容に変更があった場合かつデータがある場合だけ保存機能を有効にする実装をします。
広 告
目次
前提条件
- 「タイトルバーに変更有無を表示する」が実施済であること
動作確認環境
- Windows10 64bit
- Visual Studio Express 2015 for Windows Desktop
1. 条件を判定して保存機能を有効にする
前回作成したUpdateStatus()
メソッドが受け取るEdited
は、テキストボックスの内容に変更があったことを示す値です。このEdited
の値を判定して保存機能の有効・無効を切り替えるようにします。
「名前を付けて保存」機能については、変更がなければ無効にし、変更があれば有効にします。以下のコードをUpdateStatus()
メソッドの末尾に追加します。
「名前を付けて保存」機能の有効・無効を切り替える
if (!Edited) { // 編集前 // 「名前を付けて保存」を無効 MenuItemFileSaveAs.Enabled = false; } else { // 編集中 // 「名前を付けて保存」を有効 MenuItemFileSaveAs.Enabled = true; }
「上書き保存」機能については、ファイル名が未決定の場合(既存の処理部分)、もしくはテキストボックスの内容に変更がなければ無効に、そうでなければ有効にします。これらを踏まえ、既存の「上書き保存」機能の有効・無効を切り替える処理部分を以下のように書き換えます。
「上書き保存」機能の有効・無効を切り替える
if (FileName == "" || !Edited) { // ファイル名が未設定 or 編集前 // 「上書き保存」を無効 MenuItemFileSave.Enabled = false; } else { // 「上書き保存」を有効 MenuItemFileSave.Enabled = true; }
またテキストボックスの内容を変更した後でも、そのテキストをすべて消してしまった場合(保存すべきデータがない場合)は保存機能を無効にします。テキストボックスに入力されている文字数は、textBox.TextLength
で取得できるため、データがない場合は以下のように判定できます。
データがない場合
textBox.TextLength == 0
これを「名前を付けて保存」「上書き保存」機能の有効・無効を切り替える判定にOR条件で追加します。
最終的にUpdateStatus()
メソッドは以下のようになります。
UpdateStatus()メソッド
// アプリの状態を更新する private void UpdateStatus(string Name, bool Edited) { // ファイル名を保持する this.FileName = Name; // タイトルバー表示名 string title = ApplicationName; if (FileName != "") { // タイトルバーにファイル名を表示する title += " - " + Name; } if (Edited) { // 編集中があれば「(変更あり)」をタイトル名に付ける title += "(変更あり)"; } // タイトルバー表示名を設定する this.Text = title; if (FileName == "" || !Edited || textBox.TextLength == 0) { // ファイル名が未設定 or 編集前 // 「上書き保存」を無効 MenuItemFileSave.Enabled = false; } else { // 「上書き保存」を有効 MenuItemFileSave.Enabled = true; } if (!Edited || textBox.TextLength == 0) { // 編集前 // 「名前を付けて保存」を無効 MenuItemFileSaveAs.Enabled = false; } else { // 編集中 // 「名前を付けて保存」を有効 MenuItemFileSaveAs.Enabled = true; } }
2. プログラムを実行して結果を確認する
これまでの手順の実行結果は以下の通りです。

デフォルトは「上書き保存」「名前を付けて保存」機能が無効になっています。

テキストボックスの内容を変更すると「名前を付けて保存」機能が有効になります。しかし、ファイル名が決まっていないため「上書き保存」機能は無効になっています。

ファイル名が決まっている状態で、テキストボックスの内容を変更すると「上書き保存」機能が有効になります。

ファイル名が決まっている状態で、テキストボックスの内容を変更がある場合でも、テキストボックスに何も入力されていない場合は、「名前を付けて保存」「上書き保存」機能が無効になります。
次は「終了前に確認ダイアログを表示する」です。