【C#】プロパティ設定の方法【初心者向け】

プロパティ値の設定

C#のプロパティの設定方法です。

プロパティ値の設定はC#以外のプログラミングでもほぼほぼ関わる内容なので、C#以外のプログラミングに興味がある人はプロパティ設定のイメージを何となく身につけてくれればと思います。

今回はC#、開発環境はVisual Studio 2019で説明します。

プロパティ値とは

プロパティ値をイメージしやすい表現で簡単に説明すると、

アプリケーション内で使用できるグローバル変数みたいなやつ

だと思ってくれれば良いと思います。

だったら、わざわざプロパティに設定しなくても良くない?と思うかもしれませんが、
もちろんプロパティに設定するメリットはあるので、設定する方法と共にメリットも
お伝えしていきます。

プロパティの設定方法

まずは、適当にプロジェクトを作成します。ちなみに、プロジェクトを作成する際に何かしら
の設定をするわけではないので、既存のプロジェクトがある場合はそれを開いてもらえればOKです!

今回はWindowsフォームアプリケーション(.NET Framework)で説明していきます。

1.プロジェクトを作成します。作成するとこんな画面になると思います。
初期画面

2.ソリューションエクスプローラー(画面右上側に表示されている一覧のようなもの)に表示されている「Properties」をダブルクリックします。もし、ソリューションエクスプローラー内にPropertiesが無い場合は、ソリューションエクスプローラーのプロジェクト名の部分(ソリューションと書かれているものの1行下)を選択後、画面上部の「プロジェクトタブ→(プロジェクト名)のプロパティ」を選ぶと設定画面が開きます。

3.画面左部のタブの一覧から「設定」を開きます。ここで、プロパティ値を設定します。

4.プロパティ値を設定します。設定内容は以下。
名前:好きな名前を設定(変数名的なイメージ)
種類:プロパティ値の型
スコープ:アプリケーションorユーザー。基本はユーザーで良いです。
値:プロパティの値を設定します。
こんな感じに設定します。もちろん変数名なのでアルファベットでもOKです。

これで保存すれば設定完了です!

では、次に設定したプロパティ値の使い方についてです。

プロパティ値の使い方

例として、こんな感じのフォームを作成してみました。

また、実装はこんな感じ。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

        /// <summary>
        /// 表示ボタンを押したときの処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_denote_Click(object sender, EventArgs e)
        {
            //各テキストボックスにプロパティ値を設定する
            //テキストボックスはstring型だから、int,boolはstring変換
            textBox_str.Text = Properties.Settings.Default.文字列くん;
            textBox_int.Text = Properties.Settings.Default.数値さん.ToString();
            if(Properties.Settings.Default.ブール様 == false)
            {
                radioButton_false.Checked = true;
            }
            else
            {
                radioButton_true.Checked = true;
            }
        }

        /// <summary>
        /// 設定ボタンを押したときの処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_set_Click(object sender, EventArgs e)
        {
            //画面の内容をプロパティに設定する。
            Properties.Settings.Default.文字列くん = textBox_str.Text;
            Properties.Settings.Default.数値さん = Convert.ToInt32(textBox_int.Text);
            if (radioButton_false.Checked)
            {
                Properties.Settings.Default.ブール様 = false;
            }
            else
            {
                Properties.Settings.Default.ブール様 = true;
            }

            //プロパティを保存する
            Properties.Settings.Default.Save();
        }

        /// <summary>
        /// 数値さん用のテキストボックスの入力時の処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void textBox_int_KeyPress(object sender, KeyPressEventArgs e)
        {
            //数値さん用のテキストボックスには数値しか入力できないようにする
            if (e.KeyChar != '\b' && (e.KeyChar < '0' || '9' < e.KeyChar))
            {
                e.Handled = true;
            }
        }
    }
}

ソースコードにあるように、プロパティ値は

Properties.Settings.Default.(プロパティの名前)で使用します。

では、実際に先程作成したプログラムを実行してみます!

フォーム起動→表示ボタン押下

プロパティから値を取得できていますね!

次に、テキストボックスの中身を変更して設定してみます。

設定ボタン押下

こんな感じで設定してみました。その後、再度フォームを起動して表示ボタンを押すと、設定した値が正しく反映されていました。

ですが、ここで1つ不思議なことが…

先程の操作でプロパティ値を設定したはずなのに、改めてvisual studioでプロジェクトのプロパティを確認してみると

あれ?値が変わっていなくない?

実は、これがユーザースコープで追加したプロパティの落とし穴でもあり、メリットでもあります。

どこに変更したプロパティが登録されているかというと、

C:\Users\(ユーザー名)\AppData\Local\(プロジェクト名)\(プロジェクト名.exe_○○)\バージョン\user.config

に値が設定されています。user.configをテキストエディタで開いてみると

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <userSettings>
        <settingProperties.Properties.Settings>
            <setting name="文字列くん" serializeAs="String">
                <value>変更した値です</value>
            </setting>
            <setting name="数値さん" serializeAs="String">
                <value>999</value>
            </setting>
            <setting name="ブール様" serializeAs="String">
                <value>True</value>
            </setting>
        </settingProperties.Properties.Settings>
    </userSettings>
</configuration>

上記コードの通り、先程設定した値が反映されていることが確認できますね。

つまり、ユーザースコープでプロパティを追加し、画面操作等で値を更新することで、

値をユーザー毎に設定、管理することができる

システムが作れることになりますね!

具体的にユーザー毎に設定しておきたいことの例を挙げるとしたら、
・ファイル保存ダイアログを開いたときに、過去に指定したフォルダがある場合にはそのフォルダをデフォルトとして開くようにパスを保存しておく
・フォームを操作で大きさを変更した場合に次に同じフォームを開いたときに大きさを設定できる
・ログイン画面で入力したID、パスワードを次回起動時に入力してある状態にする

などなど、様々な使い道がありますね!

最後に

というわけで、今回はC#でプロパティ設定の方法について紹介しました。

もし、この内容がためになったなどのコメントがありましたら、

もつきちのTwitterをフォローの上、DM等でコメントしてくれると嬉しいです!
Twitter:@Motsukichi_

読んでくださり、ありがとうございました!

コメント

タイトルとURLをコピーしました