- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!C# 設定情報を保存する
[C#]
*Windows Form アプリケーションでアプリケーション設定機能を実装
!!テキストボックスの入力値を設定ファイルに保存する例
!適当なWindows Form に、テキストボックスを配置
*txtDatabaseFileNameとする
{{ref_image 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();
}
!試しに動かしてみる
*設定し、アプリケーションを終了し、再度起動して、値がセットされていることを確認
{{ref_image 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>
""設定 xmlファイルがどういう理屈でこの場所に作成されるかがいまひとつよくわからない。今回は、以下のフォルダにuser.configとして作成された。
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;
}
*正しく読み込める。