はじめに
「Windows phoneでテキストエディタを作ろう!」の3回目では,「保存」「開く」を実装しましょう。「保存」は入力した文章をテキストファイルに保存し,「開く」は保存したテキストファイルを開いて編集可能にします。
今回は,「保存」「開く」の実装のほかにも,ソフトキーボード(SIP:Soft Input Panel)を使った際の問題にも対応しましょう。ハードキーボードが搭載されていないWindows phoneで文章を入力するときにはソフトキーボードを使いますが,最前面に表示されるのでアプリケーションが隠れてしまう問題があります。
今回も実装後のサンプルプログラムを用意しています。
- サンプルプログラム(99.2KB)
ファイルの書き込みと読み込みは簡単!
「Windows phoneでテキストエディタを作ろう!」の1回目で,フォームデザイナを使って,SaveFileDialogとOpenFileDialogを配置しました。
ユーザーに対してどの場所にどんなファイル名でテキストファイルを保存するのか(開くのか)を選択させます。この2つのダイアログの動作にあまり違いはなく,選択後には対象のテキストファイルを絶対パスで取得できます。
「保存」と「開く」の実装にはあまり差はありません。
「保存」の実装
入力した文章をテキストファイルへ書き込みます。プロパティの設定をソースコードで書いてもよいのですが煩雑になるので,プロパティウィンドウで以下の指定をします。
| Name | saveFileDialog |
|---|---|
| Filter | テキストファイル(*.txt)|*.txt |
| FilterIndex | 1 |
Filterプロパティは名前の通り,フィルタをかけ拡張子が「.txt」のファイルのみを表示します。SaveFileDialogの場合は,ユーザーが拡張子を入力しなくても自動的に補完されます。
メニューから「保存」が選択された時に,ファイル保存用のダイアログを表示し,ユーザーにどの場所に保存するのかを問い合わせます。ユーザーが指定した名前と同じファイル名のファイルが存在していた場合は注意を促してくれますので,勝手にデータを上書きしてしまうことはありません。
private void menuSave_Click(object sender, EventArgs e)
{
// ファイルを保存するためのダイアログを表示する
if (saveFileDialog.ShowDialog() != DialogResult.OK)
{
return;
}
// テキストボックスに入力されているテキストを
// ユーザーが指定したファイルパスに書き出す
string path = saveFileDialog.FileName;
using (StreamWriter strm = new StreamWriter(path))
{
strm.Write(textEdit.Text);
}
}
「開く」の実装
ファイルシステムにあるテキストファイルを読み込みます。SaveFileDialogと同様にプロパティウィンドウで以下の指定をします。
| Name | openFileDialog |
|---|---|
| Filter | テキストファイル(*.txt)|*.txt |
| FilterIndex | 1 |
SaveFileDialogで実施した方法と逆に,OpenFileDialogでユーザーに指定してもらったファイル名からテキストを読み込み,textEditのTextプロパティへ設定しています。
private void menuOpen_Click(object sender, EventArgs e)
{
// ファイルを開くためのダイアログを表示する
if (openFileDialog.ShowDialog() != DialogResult.OK)
{
return;
}
// ユーザーが指定したファイルパスから
// テキストを読み込みTextBoxに表示させる
string path = openFileDialog.FileName;
using (StreamReader strm = new StreamReader(path))
{
textEdit.Text = strm.ReadToEnd();
}
}
この方法だと読み込んだテキストを無条件にTextプロパティへ設定していますので,編集中の文章があっても関係なしに上書きしてしまいます。長時間掛けて編集したファイルが消えてしまうのは,とても悲しい気持ちになりますので対策をしましょう。

