| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

C Sharp 設定情報を保存する

提供: MyMemoWiki
2020年2月15日 (土) 08:00時点におけるPiroto (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

C# 設定情報を保存する

C#

  • Windows Form アプリケーションでアプリケーション設定機能を実装

テキストボックスの入力値を設定ファイルに保存する例

適当なWindows Form に、テキストボックスを配置

  • txtDatabaseFileNameとする

0286 app setting01.jpg

ApplicationSettingsBase クラスを継承して 設定管理クラス AppSettings を作成

  • ApplicationSettingsBaseを継承し、アプリケーション用の設定管理クラスAppSettingsを作成。
  • DtabaseFileName キーで設定を保存させる。
using System.Configuration;

namespace EntityFrameworkTest
{
    sealed class AppSettings : ApplicationSettingsBase
    {
        [UserScopedSetting()]
        [DefaultSettingValue("")]
        public string DatabaseFileName
        {
            get { return (string)this["DatabaseFileName"]; }
            set { this["DatabaseFileName"] = value; }
        }
    }
}

テキストボックスのプロパティと設定クラスをバインドする

appSettings は、プライベートメンバーとして宣言しておく
private AppSettings appSettings = null;
Form の Loadイベントで、設定クラスを初期化しテキストボックスのTextプロパティとバインド
  • コントロールもしくはForm のDataBindings.Add メソッドで、設定クラスの特定のキーと、プロパティをバインドする。
private void ConfigForm_Load(object sender, EventArgs e)
{
    appSettings = new AppSettings();
    txtDatabaseFileName.DataBindings.Add("Text", appSettings, "DatabaseFileName");
}

設定の保存

Form のClosingイベントでSaveメソッドを呼び出し設定を保存させる。
private void ConfigForm_FormClosing(object sender, FormClosingEventArgs e)
{
    appSettings.Save();     
}

試しに動かしてみる

  • 設定し、アプリケーションを終了し、再度起動して、値がセットされていることを確認

0287 app setting02.jpg

  • 正しく保存、再読み込みされた

保存された内容

  • 以下の内容の user.config ファイルが作成され、プロパティの内容が永続化された。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="EntityFrameworkTest.AppSettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <EntityFrameworkTest.AppSettings>
            <setting name="DatabaseFileName" serializeAs="String">
                <value>C:\Users\piroto\Documents\Visual Studio 2008\Projects\EntityFrameworkTest\EntityFrameworkTest\sample.sdf</value>
            </setting>
        </EntityFrameworkTest.AppSettings>
    </userSettings>
</configuration>

<blockquote>設定 xmlファイルがどういう理屈でこの場所に作成されるかがいまひとつよくわからない。今回は、以下のフォルダにuser.configとして作成された。</blockquote>

C:\Users\piroto\AppData\Local\Hewlett-Packard\EntityFrameworkTest.exe_Url_5htezannqikv2ogpq2wtqqlsmmdv0n3s\1.0.0.0

テキストボックスのプロパティとしてではなく利用する

string db_filename = appSettings.DatabaseFileName;

if (!File.Exists(db_filename))
{
    MessageBox.Show("Database File is not exist.", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
               return;
}
  • 正しく読み込める。