ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

C# - メモ帳ソフトを作る

初めに

 本記事では、C# を使って WIndows で使えるメモ帳を作ってみます。



メモ帳ソフト作ってみる

必要なもの

 本記事では、Visual Studio を用いてメモ帳を作ります。Unity を使っている場合はすでにインストールされていると思います。

 未インストールの場合は、下のリンク先からインストールできます。

visualstudio.microsoft.com

 インストールの仕方は下のリンク先にあるドキュメントをご覧ください。
(ドキュメント:Visual Studio のインストール)
learn.microsoft.com

どのような機能にするか

 作り始める前に、どのような機能を実装するかまとめておきましょう。

 今回は、次の3つの機能を付けます。

(機能)

  • 開く(テキストファイルを開く)
  • 保存(テキストファイルとして保存する)
  • 終了(メモ帳ソフトを終了する)


新しいプロジェクトを作成し、テンプレートを選択する

 Visual Studio を開くと、下の画像のような画面が開きます。”新しいプロジェクトを開く” をクリックします。

 使用言語とプラットフォームを選択すると、関係するテンプレートだけが表示されるようになります。今回の使用言語は C#、プラットフォームは Windows にします。

 今回使用するテンプレートは、Windows フォームアプリケーション(,NET Framework)です。windows forms app と検索すると表示されるので、選択して「次へ」をクリックします。

※ [.NET デスクトップ開発] がインストールされていない場合は、下の画像のように Windows フォームアプリケーション(,NET Framework)が見つかりません。

 「さらにツールと機能をインストールする」をクリックすると、Visual Studio Installer が開きます。 [.NET デスクトップ開発] を探して、インストールしましょう。

 プロジェクト名を変更し、「作成」をクリックします。


入力フォームの設置

 Visual Studio は次のような画面になります。

 テキストを入力する部分とメニューバーを追加します。

 ツールボックスを開きます。開き方は次の2つの方法があります。

ツールボックスの開き方)


 コモンコントロールの中に基本的なUIの要素が入っています。この中から、使用するUIを選択し、追加することができます。

 テキストを入力する部分を追加します。RichTextBox を選択し、フォームの上でドラッグすると、追加できます。
 右下には、プロパティが表示されています。

 Multiline は改行可能かどうかを表しています。今回は改行できるようにするため True にします。

 ScrollBars はスクロールバーについての設定になります。縦横両方ともスクロールバーを追加するため、Both にします。

 Dock では、選択している領域の範囲を設定できます。Top、Bottom、Left、Right、Fill、None から選択できます。
 今回は、表示領域すべて入力できるようにしたいので、Fill にするために中央の四角をクリックします。


メニューバーの設置

 ツールボックスから「メニューとツールバー」という項目の中の「MenuStrip」をフォームにドラッグアンドドロップします。

 表示したいメニューを記入します。


機能の実装

 各機能を追加するために、スクリプトを書いていきます。

 「開く」機能を追加するには、開くボタンをダブルクリックします。すると、スクリプトが次の状態で開きます。

 開くToolStripMenuItem_Click 関数内に、開くボタンをクリックしたときの処理を書きます。

using System;
using System.IO;  //File.ReadAllTextを使うために追加
using System.Windows.Forms;

namespace MemoAppWindows
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void 開くToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "テキストファイル(*.txt)|*.txt";
            dialog.Title = "開く";
            if (dialog.ShowDialog() == DialogResult.OK)
                richTextBox1.Text = File.ReadAllText(dialog.FileName);
        }
    }
}

 上記のスクリプトは次のようになっています。

スクリプトの内容)

  • OpenFileDialog を使い、ダイアログを開く
  • OpenFileDialog.Filter を使い、.txt ファイルのみ表示させるようにする
  • OpenFileDialog.Title から、ダイアログのタイトルを「開く」に変更
  • ダイアログ ボックスの [OK] をクリックした場合は、richTextBox1に開いたファイルに保存されているテキストを読み込み、表示させる

(補足1)
 richTextBox1 は先ほど追加したテキストフォームの名前になります。

(補足2)
 dialog.ShowDialog() は、DialogResult を戻り値の型とする関数で、ダイアログ ボックスの [OK] をクリックした場合は OK、それ以外の場合は Cancel を返します。
 DialogResult 列挙型はダイアログ ボックスの戻り値を示す識別子を指定します。

learn.microsoft.com

learn.microsoft.com

 同様に、保存・終了の機能を追加します。

(最終的なスクリプト

using System;
using System.IO;
using System.Windows.Forms;

namespace MemoAppWindows
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void 開くToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "テキストファイル(*.txt)|*.txt";
            dialog.Title = "開く";
            if (dialog.ShowDialog() == DialogResult.OK)
                richTextBox1.Text = File.ReadAllText(dialog.FileName);
        }

        private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "テキストファイル(*.txt)|*.txt";
            dialog.Title = "保存";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                File.WriteAllText(dialog.FileName, richTextBox1.Text);
            }
        }

        private void 終了ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("メモ帳を終了します", "終了", MessageBoxButtons.YesNo);
            if (result == DialogResult.Yes)
            {
                Close();
            }
        }
    }
}
実行して確認

 開始ボタンをクリックすることで、ビルドして実行、確認することができます。

(確認事項)

  • 開くからテキストファイルが開けるか
  • テキストファイルの保存ができるか
  • 終了ボタンで終了できるか

補足

 保存ボタンや終了ボタンをダブルクリックせずに、いきなりスクリプトに関数を記述するとボタンを押しても関数が実行されませんでした。
 おそらくダブルクリックしてから関数を記述する以外に、関数を割り当てる方法があると思うのですが、現在わからないので、分かり次第追記します。