Programming Style

メニュー

初心者がアプリ開発者になるためのプログラミング学習サイト

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

 

windows-texteditor-save-enable-01

ユーザがテキストボックスの内容を変更していなければ、それを保存する必要がありません。また保存データがない場合も保存する必要がありません。ここではテキストボックスの内容に変更があった場合かつデータがある場合だけ保存機能を有効にする実装をします。

 

広 告

 

目次

前提条件

動作確認環境

  • 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. プログラムを実行して結果を確認する

 

これまでの手順の実行結果は以下の通りです。

 

windows-texteditor-save-enable-01

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

 

 

windows-texteditor-save-enable-02

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

 

 

windows-texteditor-save-enable-03

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

 

windows-texteditor-save-enable-04

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

 

次は「終了前に確認ダイアログを表示する」です。

 

 

 

広 告

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です