C# Programming

Image

動的プロパティ

開発環境: Visual Studio 2003 

1.目次

2.目的

以下では、動的プロパティと設定ファイルについて説明します。

たとえば私がデータベースソフトを作って、フリーソフトで公開したとしましょう。このとき、私は自分の環境のデータベースのコネクションストリングを指定して、コンパイル&テストします。ところが、それをダウンロードしたあなたのデータベースの環境は、私の環境とは異なる可能性があります。このため、何らかの方法でこのようなユーザごとの環境設定のための値を取り込む必要があります。

過去のWindows の歴史から見てみると、Win3のころはアプリケーションのサイズ、位置などのさまざまな情報設定ファイルは、*.ini ファイルが使われていました。その後ユーザごとの設定ができることから、レジストリが使われるようになりました。しかし、レジストリにはシステムにとってクリティカルな情報が格納されており、気軽に変更するのは大変危険であるという問題点がありました。また、Internet からダウンロードしてきたソフトがレジストリというシステムにクリティカルな情報に直接アクセスするのもセキュリティ上好ましくないことから、”.NET”では再び *.ini ファイルに似たファイルベースの設定ファイルの仕組みが復活しました。".NET"では、動的プロパティという仕組みがつかわれます。

動的プロパティで使用されるファイルは、設定ファイルと呼ばれ、拡張子は .config です。
また、設定ファイルのフォーマットは、XMLが使われています。

3.参考書

(1) VisualStudio.NET のヘルプ
(2) ini ファイルのリードライト 過去の資産を引きずっている人はこちら^^;

4.動的プロパティの使い方

動的プロパティを理解するには、実際に .NET/C# で設定ファイルを使ってみるのがわかりやすいです。
以下では、簡単な例で説明します。
  1. Windows アプリケーションのプロジェクトを新規作成します。
  2. フォームののプロパティを表示します。この中で、DynamicProperties という属性があります。このプロパティの詳細を見ると、・・・というボタンがあるので、このボタンを押します。

    Image
  3. すると、次のような動的プロパティのダイアログが表示されます。ここでは、Text プロパティのチェックボックスをONにします。このキーマップというのは、この動的プロパティにアクセスするためのキーになります。

    Image

    注意

    プロパティのすべてが動的プロパティとしてサポートされているかというと大間違い!
    Form では、このダイアログで表示されているプロパティしかサポートされていません。
    Windows.Forms.Form や Windows.Forms.Control でサポートされるダイナミックプロパティは、Microsoft が重要だと思ったものだけサポートされています。

    たとえば、Windows.Forms.Form のバックグラウンドイメージとか、アイコンはサポートされておらず、設定ファイルで変えることはできません。まったく!
  4. OKボタンを押すと、次のように 動的プロパティ Text が生成されていることがわかります。

    Image

    このとき、もともとのプロパティを見てください。動的プロパティを示す、小さなアイコンが表示されていることがわかります。

    Image
  5. 次に、ソリューションエクスプローラを見てください。app.config ファイルが追加されています。ソリューションエクスプローラの app.config ファイルをダブルクリックしてファイルを開くと、次のような XML ファイルが生成されているのが確認できると思います。これが設定ファイルです。

    Image
  6. では、F5キーを押して、このままコンパイル&実行してみてください。コードを書く必要はありません。タイトルが "Form1" というウィンドウが表示されたと思います。
  7. では、次に、app.config の
    <add key="Form1.Text" value="Form1" />
    を、
     <add key="Form1.Text" value="" />
    として、コンパイル&実行してみてください。
    タイトルが "" というウィンドウが表示されたと思います。

    さて、ここからが大事!

  8. メニューのファイルを開くを選択して、ファイルダイアログを表示してください。  ファイルダイアログから、プロジェクト¥bin\Debug (もしくは、プロジェクト\bin\Release) のディレクトリを選択してください。次のような、プロジェクト名.exe.config というファイルが作られているのがわかります。
    このファイルが、アプリケーションと同時に配布するための設定ファイルで、中身は先ほどの app.config と同じです。このファイルは、コンパイルにより自動的に生成されます。

    Image
  9. Visual Studio.NET からではなく、Notepad などから プロジェクト名.exe.config の
    <add key="Form1.Text" value="" /> の value を次のように変えます。
    <add key="Form1.Text" value="C# プログラミング" /> 
    そして、Visual Studio.NET からではなく、エクスプローラなどから直接アプリケーションを起動してみてください。

    コンパイルしていないにもかかわらず、タイトルが C# プログラミングに変更することができます。これがダイナミックプロパティです。

5.動的プロパティを使う上での注意

  • アプリケーションに対して 1 つの設定ファイルしか使用できません。
  • ファイル名はアセンブリ名.exe.config です。
  • DLL では動的プロパティはサポートされていません。
  • 当然ながら、パスワードなどを格納するような場合には、セキュリティについて十分注意する必要があります。

6.独自の項目を設定ファイルに追加し、利用する方法

前述したように、Windows.Forms.Form や Windows.Forms.Control でサポートされるダイナミックプロパティは、
Microsoft が重要だと思ったものだけサポートされています。たとえば、Windows.Forms.Form のバックグラウンドイメージとか、アイコンはサポートされておらず、設定ファイルで変えることはできません。これだと、あまりに不便なので、設定ファイルに独自の項目を追加して、利用する方法について説明します。

アイコンの項目を設定ファイルに追加し、アプリから利用する方法

  1. app.config 設定ファイルに、次のように"Form1.Icon" キー(文字列は任意) と、アイコンのパスを示すValue="適当なアイコンへのパス"を追加します。

    Image

  2. 次に、InitializeComponent() の次に、次のように設定ファイルからアイコンのパスを読み込み、アイコンを変更するコードを追加します。

    public Form1()
    {
    //
    // Windows フォーム デザイナ サポートに必要です。
    //
    InitializeComponent();

        string iconPath = System.Configuration.ConfigurationSettings.AppSettings["Form1.Icon"];
    this.Icon = new System.Drawing.Icon(iconPath);

    }

    注意: ファイルが見つからない場合など、エラー処理は省略しています。適当に処理を追加してください。
  3. コンパイルし、プロジェクト名.exe.config ファイルで、適当なアイコンを指定することにより、設定ファイルからアイコンを変更することができるようになります。同様に、ほかのプロパティに対しても適用できると思います。