Chapter 27

ステップ7-2: ロジックの記述

Apterygiformes-zenn
Apterygiformes-zenn
2021.12.22に更新

ファイルを開く処理

開くメニューのClickイベントにOpenMenu_Clickと入力してEnterを押します。

OpenMenu_Clickに以下を書きます。
もし赤波線表示が出たらいつものやり方で解消してください。

// 「ファイルを開く」ダイアログ生成
var dialog = new OpenFileDialog();
// ファイルの種類
dialog.Filter = "テキスト ドキュメント (*.txt)|*.txt|すべてのファイル (*.*)|*.*";

// ダイアログを表示(ファイルが選択されて「開く」が押されたらtrueが返ってくる)
if (dialog.ShowDialog() == true)
{
    try
    {
        IsEnabled = false;

        using var reader = new StreamReader(
            dialog.FileName,
            encoding: Encoding.UTF8);

        // 読み込んだ内容をTextBoxに設定
        Memo.Text = reader.ReadToEnd();
        
        // ステータスバー更新
        StatusInfo.Content = $"{dialog.FileName} を開きました。";
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    finally
    {
        IsEnabled = true;
    }
}

ダイアログのFilterプロパティは、
「ファイルの種類コンボボックスに表示するテキスト」と、
「それを選択したときにファイル一覧に表示する拡張子」の順で
任意の個数、|区切りで指定します。

テキスト ドキュメント (*.txt)|*.txt|すべてのファイル (*.*)|*.*

表示テキスト 拡張子
テキスト ドキュメント (*.txt) *.txt
すべてのファイル (*.*) *.*

https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.win32.openfiledialog?view=windowsdesktop-6.0

ファイルを保存する処理

名前を付けて保存メニューのClickイベントにSaveAsMenu_Clickイベントハンドラを設定し、以下を書きます。

// 「名前を付けて保存」ダイアログ生成
var dialog = new SaveFileDialog
{
    // ファイルの種類
    Filter = "テキスト ドキュメント (*.txt)|*.txt|すべてのファイル (*.*)|*.*",
    // 既定の拡張子
    DefaultExt = "txt",
    // ファイル上書き警告表示
    OverwritePrompt = true
};

// ダイアログを表示(ファイルを指定して「保存」が押されたらtrueが返ってくる)
if (dialog.ShowDialog() == true)
{
    try
    {
        IsEnabled = false;

        using var writer = new StreamWriter(
            dialog.FileName,
            append: false,
            encoding: Encoding.UTF8);

        // TextBoxの内容をファイル出力
        writer.Write(Memo.Text);
        
        // ステータスバー更新
        StatusInfo.Content = $"{dialog.FileName} を保存しました。";
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    finally
    {
        IsEnabled = true;
    }
}
📘他の書き方

SaveFileDialogの初期化は、OpenFileDialogの時のように以下の書式でも書けますが、設定するプロパティが多い場合は上の書式の方がすっきり書けます。

// 「名前を付けて保存」ダイアログ生成
var dialog = new SaveFileDialog();
// ファイルの種類
dialog.Filter = "テキスト ドキュメント (*.txt)|*.txt|すべてのファイル (*.*)|*.*";
// 既定の拡張子
dialog.DefaultExt = "txt";
// ファイル上書き警告表示
dialog.OverwritePrompt = true;

https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.win32.savefiledialog?view=windowsdesktop-6.0

終了処理

終了メニューのClickイベントにCloseMenu_Clickイベントハンドラを設定し、以下を書きます。

Close();

文字サイズ変更処理

文字サイズ標準メニューのClickイベントにTextSizeMenu_Clickイベントハンドラを設定し、以下を書きます。

Memo.FontSize = Zoom.IsChecked == true ? 36 : 12;
📘他の書き方
if (Zoom.IsChecked == true)
{
    Memo.FontSize = 36;
}
else
{
    Memo.FontSize = 12;
}

文字サイズ拡大がチェックされていたらTextBoxの文字サイズに36を、それ以外(文字サイズ標準)の場合は12を設定します。

文字サイズ拡大ClickイベントにもTextSizeMenu_Clickを設定しておいてください。

バージョン情報表示処理

バージョン情報メニューのClickイベントにAboutMenu_Clickイベントハンドラを設定し、以下を書きます。

MessageBox.Show("バージョン 0.01", "メモ");

完成です。

実行

実行してみます。

適当に何か入力し、表示メニューを開きます。

文字サイズ拡大を選択します。
文字が大きくなりました。

ファイル > 名前を付けて保存を選択します。

適当な保存先を選び、ファイル名を指定し、保存ボタンを押します。

テキストの内容を適当に変更し、ファイル > 開くを選択します。

さきほど保存したファイルを指定します。

復元されました。

復習ポイント

  • 「ファイルを開く(ファイル選択)」ダイアログ
  • 「名前を付けて保存(ファイル保存)」ダイアログ