ものえおさむ

C#で作る、あなただけのメモ帳 ~アプリーケーション情報の保存~

2009-04-28 11:18:00

はじめに
このブログでは、"Windows アプリケーションってどう作るのかよくわからない" といったプログラマ向けに Visual C# 2008 Express Edition (無償) を使用した Windows アプリケーションに作り方について説明しています。
Visual C# 2008 Express Edition (無償)(※) の入手方法については
この記事 を、プロジェクトのコンパイル方法については この記事を参照してください。

(※1)大学生、専門学校生の方は DreamSpark で、商用の Visual Studio を無償で入手することもできます。
(※2)設立 3 年未満のベンチャー企業の方は BizSparkで、Microsoft の開発製品、およびサーバー製品を無償で使用することができます。

これまたずいぶん御無沙汰してしまいたがお元気でしょうか?

期の変わり目で本業が忙しいのと、12 年と少し住んだ自宅の引っ越しやらなにやらが重なって、またしてもこんなに間があいてしまいました。

さて今回は、Windows フォームアプリケーションの設定の保存について書きたいと思います。

アプリケーションを開発をしていくと、コンパイル後に変更される可能性のある、あるいはコンパイル後に発生するアプリケーションの情報を動的に保持したいというニーズが出てきます。

たとえば、ウィンドウの位置やサイズ、DB への接続情報といったものは、ユーザーの嗜好や使用する環境によって異なる場合が多いので、ソースコード内に設定値を記述してしまうと、使用するにあたり著しく利便性を欠くことになります。(あたりまえですが)

よって、これらの情報を外部ファイルに保存させる等、設定および保持させるための仕組みを実装する必要性があります。

Visual Studio には、こうしたアプリケーションの情報を簡単に記憶させるための実装を簡単に行うためのしくみが用意されています。

むつかしくて長ったらしいコードを書かなくても、すっきりした XML 形式のファイルで設定値を自動で保存するうえ、設定値の取り出しも保存も簡単なコードで行うことができます。

今回は、サンプルアプリケーションのウィンドウサイズや、位置、フォントの色やサイズを保持する機能を追加して、Visual Studio を使用してアプリケーションの状態を記録させる手順を紹介します。

いままでこのブログを見て作業されていた方も(※)、今回はじめての方も以下の SkyDrive からプロジェクトをダウンロード入手して、Visual Studio でオープンしてください。
(※)今回のサンプルには、このブログで紹介していない [行へ移動(G)...] メニューとそれら周辺の機能が実装されています。なぜ紹介していないかというと、地味な機能の割には結構な分量の説明が必要だったからからです。(...すみません。) ここは機会をみて別途書きたいと思います。

Sample04.zip
http://cid-19ad6021fd45505c.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%8b/builder/sample04.zip

 

Visual Studio のアプリケーションの設定画面

Visual Studio には開発を行うアプリケーションの設定を保持する機能の実装を支援するための機能を持っており、一連の作業は初期設定に GUI、実装にコーディングという形態で行います。

アプリケーションの初期設定用の情報を設定するには、以下の手順を実行します。

  1. [ソリューション エクスプローラー] でプロジェクト名を右クリックし、表示したコンテキストメニューより [プロパティ] を選択
  2. プロジェクトのプロパティ画面が表示されるので、画面左の [設定] タブを選択
  3. アプリケーション設定画面が表示されるので、以下のように設定

補足 : アプリケーション設定の各フィールドの説明は以下のとおりです。

名前 スコープ
設定値の読み出し/書き込み時に使用する名前 設定値の型 設定がユーザー固有であるかアプリケーション全体であるか(※)

(※)[スコープ] で "アプリケーション" を指定した場合は、設定値を変更することができません。

以上で既定の値の設定は完了です。

[ソリューション エクスプローラ] を見ると、アプリケーションの設定値を保存するためのファイル app.config ファイルが追加されているのが確認できます。

 

app.config をオープンすると、設定値が XML 形式で保持されているのが確認できます。

この app.config ファイルは、コンパイル時に アプリケーションのファイル名.exe.config と言う名前にリネームされます。

指定したアプリケーションの設定値には以下のようなコードでアクセスします。

読み出し
値 = Properties.Settings.Default.設定値につけた名前;

保存
Properties.Settings.Default["設定値につけた名前"] = 値;

 

ユーザーからの入力画面の準備

アプリケーションの設定情報は、ウィンドウのサイズや位置と言った自然発生的なもの以外でも、フォントの種類や色、データベースへの接続情報といった、ユーザーの指定に因るものが発生します。

そういったユーザーからの入力を受け取るためには別途インターフェースを作成する必要があります。

今回は Windows フォームアプリケーションということで、フォームで作成した入力画面を用意しました。

SkyDrive からダウンロードした sample4.zip に同梱されている settingDialog フォルダの以下のファイルをプロジェクトに追加してください。同ファイルをプロジェクトに追加するには、[ソリューション エクスプローラ] からプロジェクト名を右クリックし、表示されたコンテキストメニューより [追加] - [既存の項目] を選択します。

settingDialog.cs
settingDialog.designer.cs

次に Form1 をデザイン画面で表示し、メニューバーの [ツール(&T)] - [オプション(&O)] をダブルクリックします。

[オプション(&O)] メニューのイベントハンドラが追加されるので、以下のようにコードを記述します。

private void menuOption_Click(object sender, EventArgs e)
{
   settingDialog settinfDlg = new settingDialog(textBox1);
   settinfDlg.ShowDialog(this);

以上で設定フォームの追加は完了です。

[F5] キーを押下してアプリケーションを実行し、メニュー [ツール(&T)] - [オプション(&O)] を選択して表示されるダイアログボックスの機能が正しく動作するか確認してください。

 

 

アプリケーション設定の読み込みと保存

アプリケーションのロード時とクロージング時にアプリーケーション設定の保存を行います。

以下のようにコードを実装してください。

アプリケーション情報の読み込み

//フォームロード時のイベント
private void Form1_Load(object sender, EventArgs e)
{
      LoadSetting();
}

 //状態の取り出し
private void LoadSetting()
{
   //ユーザーにより値が設定されないうちはアプリケーション情報をロードしない
   if (Properties.Settings.Default.Initialized)
   {
      this.Height = Properties.Settings.Default.Height;
      this.Width = Properties.Settings.Default.Width;
      this.Top = Properties.Settings.Default.Top;
      this.Left = Properties.Settings.Default.Left;
      textBox1.Font = Properties.Settings.Default.Font;
      textBox1.BackColor = Properties.Settings.Default.BackGroundColor;
      textBox1.ForeColor = Properties.Settings.Default.ForeColor;
      bool wWrapFlg = Properties.Settings.Default.WordWrap;
      textBox1.WordWrap = wWrapFlg;
      menuWordWrap.Checked = wWrapFlg;
      menuJump.Enabled = (!wWrapFlg);
    }

アプリケーション情報の書き込み

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
   const string MSGBOX_TITLE = "アプリケーションの終了";
   if (confirmDestructionText(MSGBOX_TITLE))
   {
      SaveSetting();
      this.Dispose();
      Application.Exit();
   }
   else
   {
      e.Cancel = true;
   }
}

///状態の保存
private void SaveSetting()
{
   Properties.Settings.Default["Height"] = this.Height;
   Properties.Settings.Default["Width"] = this.Width;
   Properties.Settings.Default["Top"] = this.Top;
   Properties.Settings.Default["Left"] = this.Top;
   Properties.Settings.Default["Font"] = textBox1.Font;
   Properties.Settings.Default["BackGroundColor"] = textBox1.BackColor;
   Properties.Settings.Default["WordWrap"] = textBox1.WordWrap;
   Properties.Settings.Default["Initialized"] = true;
   Properties.Settings.Default.Save();

以上でアプリケーション情報の読み出しと保存の実装は完了です。

アプリケーションを実行し、実行中に設定したウィンドウのサイズや位置、フォントの情報などが再起動後も保持されているか確認してみてください。

うまくいかない場合は、以下のリンクからサンプルを入手して動作を確認してみてください。

Sample05.zip
http://cid-19ad6021fd45505c.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%8b/builder/sample05.zip

次回はドラッグ & ドロップの機能について説明するか、それとも既に完成している "私が私のために作った" メモ帳をアップロードしてしまうか思案中です。。

 

 

※マイクロソフト社員のコミュニティ参加について

※このエントリは ブロガーにより投稿されたものです。朝日インタラクティブ および ZDNet Japan編集部の見解・意向を示すものではありません。
  • 1件のコメント
#1 いさみ   2012-02-26 03:56:29
>3.アプリケーション設定画面が表示されるので、以下のように設定
で、[WordWrap bool ユーザーfalse]が見きれてますね
  • 新着記事
  • 特集
  • ブログ