C#でプログラムを始めてみる連載の11回目です。前回の記事はコチラです。 hirocom777.hatenadiary.org
前回ははショートカット機能を装備してみました。
市販のツールみたいにショートカットキーを使って操作できるようになると、本格的な感じがしますよね!!そして、更なる改善をするために変数を宣言しました。
今回は、この変数を使って機能の改善をしてみようと思います。まずは編集フラグ(fileChange)からです。
前回のおさらい
前回のおさらいです。ファイルの読込み、書込みができるようになったのですが、ファイルの保存時の確認やファイル名指定など細かいところが改善の余地があると解りました。それらの改善をするには以下の3つが必要です。
- ファイルを編集中であるかを判断する印(フラグ)が必要
- 編集中のファイル名を記憶しておく必要がある
- 保存処理は、上書き保存と名前をつけて保存の2つが必要
そして、上記を実現するために論理値型の変数fileChangeと、文字列型の変数fileNameを以下の様に宣言しました。
namespace TextEditor { public partial class frmMain : Form { Boolean fileChange = false;//ファイルが変更されたかどうかのフラグ String fileName = "";//編集中のファイル名
まずは、これらの変数を使用する場面について考えてみましょう。
変数fileChangeを使用する場面
まず、変数fileChangeについて考えてみます。この変数は現在テキストエディターで開いている内容が編集中かどうかを記録します。編集をしていなければfalse、編集中であればtrueとなります。つまりfileChangeは以下の場面で設定される事になります。
- ファイルを編集するとtrueとなる
- ファイルを開いた直後はfalseとなる
- ファイルを保存した直後はfalseとなる
次に、fileChangeが参照される場面は以下になります。
- ファイルを開く直前
- テキストエディターを終了する直前
いずれもtrueであれば、現在の内容を保存するかどうか問い合わせます。
fileChangeの設定
まず、ファイルを編集したときの処理を実現します。何かの編集をしたときにfileChangeをtrueに設定します。WindowsフォームデザイナーでfrmMain上のtxtMainを選択した上で、F4キーを押してプロパティウィンドウを表示させます。次に、プロパティウィンドウ上部の稲妻の様なマークを選択(①)します。続いて下のリストからTextChangedをダブルクリック(②)しましょう。
Form1.csのコード編集画面に移って以下のコードが表示されると思います。
private void txtMain_TextChanged(object sender, EventArgs e) { }
このブロックの中に処理を書いていきます。処理と言っても以下の1行だけです。
private void txtMain_TextChanged(object sender, EventArgs e) { fileChange = true; }
これだけで、ファイルを編集するとfileChangeをtrueに設定するようになります。また、fileChangeをfalseにする設定は、ファイル読込み、書込みの処理にそれぞれ追加すればよいです。ファイル読込みは以下の様になります。
private void mnuOpen_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; if (ofd.ShowDialog() == DialogResult.OK) { System.IO.StreamReader sr = new System.IO.StreamReader( ofd.FileName); this.txtMain.Text = sr.ReadToEnd(); sr.Close(); fileChange = false;//追加部分 } }
ファイル書込みのコードは以下の様に変更しました。
private void mnuSave_Click(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; if (sfd.ShowDialog() == DialogResult.OK) { System.IO.StreamWriter wr = new System.IO.StreamWriter( sfd.FileName); wr.Write(this.txtMain.Text); wr.Close(); fileChange = false;//追加部分 } }
これでfileChangeを設定する処理は完了です。
次回は編集フラグの確認と処理
いかがでしょうか。今回は、編集フラグの設定処理を追加しました。また、イベント時(ファイル編集時)のコードの書き方もご紹介しました。次回は設定した編集フラグを使って変更がある場合の問い合わせと保存処理を実現します。お楽しみに!!