アプリの設定を読み書きする

アプリの設定を保存するとしたら、以前はINIファイルを使ったり、レジストリに書き込んだりしたものだが、最近は「設定」を使うことにしている。

「設定」というのはVisualStudioのプロジェクトのプロパティにある「設定」のこと。ここでアプリの初期値を設定できる。


アプリの共通の設定、ユーザーごとの設定も作れるので便利。しかも、画面で設定すると、C#のクラスも自動的に作れてアクセスできる。こんな感じ。

var note2 = Properties.Settings.Default.備考2;  /// 読み
Properties.Settings.Default.備考2 = "XXX";     /// 書き


複数個の設置値を扱う

上の例のように「備考1」から「備考5」まであると、いちいち「.備考2」とかは書きたくなくて、ループを回して一括処理をしたくなる。そういうときはDictionaryのようなアクセス方法もできる。

for (int i = 1; i <= 5; i++)
{
    Properties.Settings.Default[$"備考{n}"] = note[n-1];
}

難しく考えて「Properties.Settings.Default.PropertyValues」とか使ってしまったのだが悩んでしまった。上のように書けば簡単にできるのだった。

設定値の保存

設定値を変更した後は保存する。大体、メイン画面のClosedイベントで保存することが多いのだけど、どのタイミングで保存するのが正解なのかは悩みところ。保存しないままアプリを終了したらすべて消えてしまうので御注意を。

Properties.Settings.Default.Save();

アプリを動かすと自動的に読み込まれるので、読み込みメソッドを呼ぶ必要は無いみたい。

アセンブリバージョンに注意

あと、アプリのアセンブリバージョンが変わると設定値が保存される場所も変わる。デバッグ時に設定が保存されないのはなぜ?と悩んだら、アセンブリバージョンが「1.0.0.*」みたいな指定をしていないかをチェックしましょう。
「*」を指定しているとビルドごとにアセンブリバージョンの番号が変わって、保存場所が変わるので、設定が保存されていないように見えてしまう。

(2018/11/02追記)ファイルバージョンは変えても設定には影響しない。なので、アプリをバージョンアップするときは、ファイルバージョンは上げて、アセンブリバージョンは変えないのが正解?

コメント

このブログの人気の投稿

varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。