C#でアプリの設定を保存する
アプリの設定を保存する方法はいくつかありますが、レジストリやiniファイルはあまり使いたくないので、アプリケーション構成ファイルを使ってみたいと思います。 試した環境は下記です。OSのバージョンによって、ファイルの保存フォルダが変わったりします。
Visual Studio Express 2015 for Windows Desktop (C#)
Windows8.1
目次
アプリケーション構成ファイルに値を設定する
新しいプロジェクトを作ってフォームだけの状態でそのままビルドすると、実行ファイルと同じフォルダに.exe.config
という拡張子のファイルが作られます。このファイルをアプリケーション構成ファイルといいます。MSDSによると、このファイルにはアプリケーション固有の設定を記述するのだそうです。素の.exe.config
ファイルを開いてみると、中身は下記のようなXMLフォーマットの文書になっています。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
ソリューションエクスプローラーのスパナのマークをクリックすると、設定タブが開きます。
右クリックすると、設定を追加するメニューが表示されます。
下図の様に設定を追加してみます。
そしてそのままビルドすると、.exe.config
は下記のようになります。スコープをアプリケーションスコープにした設定はapplicationSettingsに、ユーザースコープにした設定はuserSettingsに記述されていますね。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
中略
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<userSettings>
<setting_trial.Properties.Settings>
<setting name="text_user" serializeAs="String">
<value>ユーザースコープのテキスト</value>
</setting>
</setting_trial.Properties.Settings>
</userSettings>
<applicationSettings>
<setting_trial.Properties.Settings>
<setting name="text_app" serializeAs="String">
<value>アプリケーションスコープのテキスト</value>
</setting>
</setting_trial.Properties.Settings>
</applicationSettings>
</configuration>
設定値を取得してみる
.exe.config
ファイルから、設定値を取得してみます。まず、フォームにテキストボックスを2つ置きます。textBox1にtext_appの値を、textBox2にtext_userの値を入れます。
コードは下記のようにします。
namespace setting_trial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// app.exe.configから設定値を取得する。
textBox1.Text = Properties.Settings.Default.text_app;
textBox2.Text = Properties.Settings.Default.text_user;
}
}
}
値を設定してみる
.exe.config
に値を設定してみます。フォームのFormClosingイベントに下記のコードを記述してみます。
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// app.exe.configに値を設定する。
Properties.Settings.Default.text_app = textBox1.Text; // この行はエラーになる
Properties.Settings.Default.text_user = textBox2.Text;
Properties.Settings.Default.Save();
}
そうすると、text_appへ値を代入する行で「プロパティまたはインデクサー
'Settings.text_app'
は読み取り専用であるため、割り当てることはできません」というエラーが出ます。アプリケーションスコープの設定値は、読み取り専用なんですね。というわけで、当該行を削除して実行してみます。
textBox2に「改変」と入力して、アプリを終了します。
そして、.exe.config
ファイルを開いてみると
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
中略
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<userSettings>
<setting_trial.Properties.Settings>
<setting name="text_user" serializeAs="String">
<value>ユーザースコープのテキスト</value>
</setting>
</setting_trial.Properties.Settings>
</userSettings>
<applicationSettings>
<setting_trial.Properties.Settings>
<setting name="text_app" serializeAs="String">
<value>アプリケーションスコープのテキスト</value>
</setting>
</setting_trial.Properties.Settings>
</applicationSettings>
</configuration>
あれ、変わってないですね。でもビルドしたアプリを再度立ち上げると、textBox2には「改変」と表示されます。これは、ユーザー用の設定ファイルに変更内容が保存されたのですね。ユーザー用の変更ファイルはWindows8.1では下記のフォルダのサブフォルダにあります。
C:\Users\アカウント名\AppData\Local\アプリ名\
上記フォルダ以下にあるuser.config
というファイルを開いてみると、下記のようになっています。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings>
<setting_trial.Properties.Settings>
<setting name="text_user" serializeAs="String">
<value>改変</value>
</setting>
</setting_trial.Properties.Settings>
</userSettings>
</configuration>
試しにこのフォルダを削除してからビルド済みのアプリを起動すると、textBox2には「ユーザースコープのテキスト」と表示されます。
ユーザー毎の設定値を規定値に戻す
設定をユーザーの設定値から規定値に戻したい時もありますよね。そういう場合はreset()メソッドを使います。フォームにボタンを追加して、ボタンのclickイベントに下記のコードを書いてみます。
private void button1_Click(object sender, EventArgs e)
{
// 設定を規定値に戻す
Properties.Settings.Default.Reset();
textBox2.Text = Properties.Settings.Default.text_user;
}
アプリを起動してボタンをクリックすると、textBox2の内容がアプリの規定値に変わります。そのままアプリを終了すると、C:\Users\アカウント名\AppData\Local\アプリ名\中略\user.config
の中身は下記のようになります。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings>
<setting_trial.Properties.Settings>
<setting name="text_user" serializeAs="String">
<value>ユーザースコープのテキスト</value>
</setting>
</setting_trial.Properties.Settings>
</userSettings>
</configuration>
設定値が、アプリの規定値に変わりましたね。
まとめ
Visual Studioのプロジェクトのプロパティで、アプリの設定を設定できる。
設定値は実行ファイルの
アプリ名.config
ファイルに保存される。設定値にはスコープが2つある。
アプリケーションスコープはアプリからの変更は不可。ユーザースコープはアプリから変更可。
Properties.Settings.Default.Save()
メソッドで設定値を保存できる。保存先は、C:\Users\アカウント名\AppData\Local\アプリ名\中略\user.config
。(環境によって異なる。)ユーザーが設定した設定値(
user.config
の値)をアプリの規定値(app.config
の値)に戻すには、Properties.Settings.Default.Reset()
メソッドを使う。
公開日
広告
C#カテゴリの投稿
- C#でMVVMって何でしょう
- C#でPDFを表示する(WPF)
- C#でアプリのログを記録してみる
- C#でアプリの設定を保存する
- C#でインスタンスをプログラムで作ってみた(Activator.CreateInstance編)
- C#でインスタンスをプログラムで作ってみた(Type.InvokeMember編)
- C#でインスタンス間のデータの受け渡しをしてみた
- C#でウェブサイトのソースを取得してみた
- C#でエラーの処理をする
- C#でクラスのフィールド宣言とコンストラクターでの初期化はどっちが優先する?
- C#でスタックを使って逆ポーランド記法の計算をしてみた
- C#で数式を中置記法から後置記法(逆ポーランド記法)に変換してみた(三角関数編)
- C#で選択(switch-case編)
- C#のWPFでデータバインディング
- C#のXAMLでメニューとステータスバーのレイアウトをしてみた
- C#のアプリの情報を表示してみた
- C#のクラスとインスタンスとオブジェクト
- C#の反復処理(foreach編)
- C#の命名規則
- C#へのMicrosoft.TeamFoundation.Controlsの参照の追加について