[Windows] 「上書き保存」機能を実装する

ここではファイルを上書き保存する機能を実装します。
広 告
目次
前提条件
- 「タイトルバーにファイル名を表示する」が実施済であること
動作確認環境
- Windows10 64bit
- Visual Studio Express 2015 for Windows Desktop
1. 上書き保存できない場合は機能を無効にする
上書き保存はファイル名が決定している時だけ有効となる機能です。そのためファイル名が決定していない場合は、機能を無効(メニューをクリックできないようにする)にします。
「上書き保存」メニューをクリックできなくするためには、MenuItemFileSave.Enabled
にfalse
を設定します。アプリケーションを起動した時はファイル名が決まっていないため、Form1_Load()
メソッドの最後で実行するようにします。
デフォルトで上書き保存機能を無効にする
private void Form1_Load(object sender, EventArgs e) { this.Text = ApplicationName; // 複数行入力を有効化 textBox.Multiline = true; // 垂直方向スクロールバー表示を有効化 textBox.ScrollBars = ScrollBars.Vertical; // フォーム全体にテキストボックスを表示 textBox.Dock = DockStyle.Fill; // 「名前を付けて保存」ダイアログで「ファイル種類」を選択させる SaveFileDialog.Filter = "テキスト文章|*.txt|すべてのファイル|*.*"; // 「上書き保存」を無効にする MenuItemFileSave.Enabled = false; }
2. 上書き保存機能を実装する
ファイルを開いた時とファイル名を付けて保存した時にファイル名は決定されます。
ファイルを開く処理を実行するLoadFile()メソッドの最後で「上書き保存」メニューをクリックできるようにさせます。クリックできるようにするためには、MenuItemFileSave.Enabled
にtrue
を設定します。
上書き保存機能を有効にする
private void LoadFile(string value) { textBox.Text = System.IO.File.ReadAllText( value, Encoding.GetEncoding("Shift_JIS")); // ファイル名を保持する this.FileName = value; // タイトルバーにファイル名を表示する this.Text = ApplicationName + " - " + this.FileName; // ファイル名が判明したため「上書き保存」を有効にする MenuItemFileSave.Enabled = true; }
ファイルを保存する処理を実行するSaveFile()
メソッドの最後でも「上書き保存」メニューをクリックできるようにさせます。
上書き保存機能を有効にする
private void SaveFile(string value) { System.IO.File.WriteAllText(value, textBox.Text, Encoding.GetEncoding("Shift_JIS")); // ファイル名を保持する this.FileName = value; // タイトルバーにファイル名を表示する this.Text = ApplicationName + " - " + this.FileName; // ファイル名が判明したため「上書き保存」を有効にする MenuItemFileSave.Enabled = true; }
次にデザインウィンドウで「上書き保存」メニューをダブルクリックして、MenuItemFileSave_Click()メソッドを作成します。「上書き保存」メニューをクリック時の処理には、すでに作成済のSaveFile()
メソッドを使用します。
上書き保存機能を実装する
private void MenuItemFileSave_Click(object sender, EventArgs e) { SaveFile(this.FileName); }
上書き保存機能の実装が完了しました。
3. プログラムを実行して結果を確認する
これまでの手順の実行結果は以下の通りです。

デフォルトは「上書き保存」メニューがクリックできないようになっています。

ファイルを開いたり、ファイル名を付けて保存した後は、「上書き保存」メニューがクリックできるようになっていることが確認できます。「上書き保存」メニューをクリックするとファイルが保存されていることも確認できます。
次は「タイトルバーに変更有無を表示する」です。