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

MyMemoWiki

「C Sharp 設定情報を保存する」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の1版が非表示)
1行目: 1行目:
==C# 設定情報を保存する==
+
==[[C# 設定情報を保存する]]==
| [[C#]]
+
[[C Sharp]] |
  
*Windows Form アプリケーションでアプリケーション設定機能を実装
+
*[[Windows]] Form アプリケーションでアプリケーション設定機能を実装
 
===テキストボックスの入力値を設定ファイルに保存する例===
 
===テキストボックスの入力値を設定ファイルに保存する例===
====適当なWindows Form に、テキストボックスを配置====
+
====適当な[[Windows]] Form に、テキストボックスを配置====
*txtDatabaseFileNameとする
+
*txt[[Database]]FileNameとする
 
[[File:0286_app_setting01.jpg]]
 
[[File:0286_app_setting01.jpg]]
 
====ApplicationSettingsBase クラスを継承して 設定管理クラス AppSettings を作成====
 
====ApplicationSettingsBase クラスを継承して 設定管理クラス AppSettings を作成====
18行目: 18行目:
 
         [UserScopedSetting()]
 
         [UserScopedSetting()]
 
         [DefaultSettingValue("")]
 
         [DefaultSettingValue("")]
         public string DatabaseFileName
+
         public string [[Database]]FileName
 
         {
 
         {
 
             get { return (string)this["DatabaseFileName"]; }
 
             get { return (string)this["DatabaseFileName"]; }
34行目: 34行目:
 
  {
 
  {
 
     appSettings = new AppSettings();
 
     appSettings = new AppSettings();
     txtDatabaseFileName.DataBindings.Add("Text", appSettings, "DatabaseFileName");
+
     txt[[Database]]FileName.DataBindings.Add("Text", appSettings, "[[Database]]FileName");
 
  }
 
  }
  
55行目: 55行目:
 
     <configSections>
 
     <configSections>
 
         <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
 
         <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" />
+
             <section name="EntityFrameworkTest.AppSettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="[[Mac]]hineToLocalUser" requirePermission="false" />
 
         </sectionGroup>
 
         </sectionGroup>
 
     </configSections>
 
     </configSections>
 
     <userSettings>
 
     <userSettings>
 
         <EntityFrameworkTest.AppSettings>
 
         <EntityFrameworkTest.AppSettings>
             <setting name="DatabaseFileName" serializeAs="String">
+
             <setting name="[[Database]]FileName" serializeAs="String">
                 <value>C:\Users\piroto\Documents\Visual Studio 2008\Projects\EntityFrameworkTest\EntityFrameworkTest\sample.sdf</value>
+
                 <value>C:\Users\piroto\Documents\[[Visual Studio]] 2008\Projects\EntityFrameworkTest\EntityFrameworkTest\sample.sdf</value>
 
             </setting>
 
             </setting>
 
         </EntityFrameworkTest.AppSettings>
 
         </EntityFrameworkTest.AppSettings>
72行目: 72行目:
  
 
====テキストボックスのプロパティとしてではなく利用する====
 
====テキストボックスのプロパティとしてではなく利用する====
  string db_filename = appSettings.DatabaseFileName;
+
  string db_filename = appSettings.[[Database]]FileName;
 
   
 
   
 
  if (!File.Exists(db_filename))
 
  if (!File.Exists(db_filename))
 
  {
 
  {
      MessageBox.Show("Database File is not exist.", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
+
      MessageBox.Show("[[Database]] File is not exist.", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
 
                 return;
 
                 return;
 
  }
 
  }
  
 
*正しく読み込める。
 
*正しく読み込める。

2020年2月16日 (日) 04:22時点における最新版

C# 設定情報を保存する

C Sharp |

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

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

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

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;
}
  • 正しく読み込める。