Windows Phoneアプリケーション開発入門

第5回 Windows phoneでテキストエディタを作ろう!(3)

この記事を読むのに必要な時間:およそ 4 分

ファイルを開いたときの上書きを防止する

保存済みかどうかのフラグを用意します。このフラグがfalseの場合は,テキストを編集中として「開く」処理時にユーザーに注意を促しましょう。TextEditorクラスに以下のフラグを用意します。

/// <summary>
/// 現在のテキストが保存済みか判定用フラグ
/// </summary>
bool _isSavedFile = true;
bool isSavedFile
{
  get { return _isSavedFile; }
  set { _isSavedFile = value; } 
}

isSavedFileは保存済みかどうかのフラグですので,現在の文章を保存したらtrueを設定します。

private void menuSave_Click(object sender, EventArgs e)
{
  // ファイルを保存するためのダイアログを表示する
  if (saveFileDialog.ShowDialog() != DialogResult.OK)
  {
    return;
  }

  // TextBoxに表示しているテキストを
  // ユーザーが指定したファイルパスに書き出す
  using (StreamWriter strm = new StreamWriter(saveFileDialog.FileName))
  {
    strm.Write(textEdit.Text);
  }

  // 保存が完了したのでフラグにtrueを設定する
  this.isSavedFile = true;
}

テキストボックスのテキストに変更があった場合,TextChangeイベントが発行されます。このイベントの通知を受けると編集中に入ったとしてisSavedFileをfalseに設定します。

private void textEdit_TextChanged(object sender, EventArgs e)
{
  // テキストが変更されたのでフラグにfalseを設定する
  this.isSavedFile = false;
}

編集中(isSavedFileがfalse)の状態でテキストファイルを開こうとすると,注意を促しユーザーの了承を得てから上書きするようにします。

private void menuOpen_Click(object sender, EventArgs e)
{
  // ファイルを保存済みか
  if (!this.isSavedFile)
  {
    // 上書きの確認用の文言
    System.Text.StringBuilder sb = new StringBuilder();
    sb.Append("現在編集中のテキストが存在しています。\n");
    sb.Append("現在のテキストを破棄して,新しく開きますか?");

    // メッセージボックスの表示
    DialogResult result = DialogResult.None;
    result = MessageBox.Show(sb.ToString(),
                             "caption", 
                             MessageBoxButtons.YesNo, 
                             MessageBoxIcon.Asterisk, 
                             MessageBoxDefaultButton.Button2);

    if (result != DialogResult.Yes)
    {
      return;
    }
  }

  // ファイルを開くためのダイアログを表示する
  if (openFileDialog.ShowDialog() != DialogResult.OK)
  {
    return;
  }

  // ユーザーが指定したファイルパスから
  // テキストを読み込みTextBoxに表示させる
  using (StreamReader strm = new StreamReader(openFileDialog.FileName))
  {
    textEdit.Text = strm.ReadToEnd();
  }
}

編集中に「開く」を選択時してみました。

上書きの注意文を表示

上書きの注意文を表示

著者プロフィール

和田健司(わだけんじ)

1982年10月12日生まれ。大阪で働くプログラマ。Microsoft MVP for Device Application Development(Jul 2010 - Jun 2011)。Windows Mobileに傾倒し今に至る。Windows Mobile向けのTipsを書いています。iPhoneアプリ開発を始めました。嫌いな食べ物はカレー。

URL: http://ch3cooh.jp/
Blog: http://d.hatena.ne.jp/ch3cooh393/