.NET TIPS Windowsアプリケーションの位置やサイズを保存するには?[2.0のみ、C#、VB]デジタルアドバンテージ 遠藤 孝信2006/04/21 |
|
|
Windowsアプリケーションでは、フォームを閉じたときの位置やサイズを記憶させておき、次回起動時には同じ位置やサイズで利用を再開したいというニーズは多い。.NET Framework 2.0ではこれを簡単に行うための機能が用意されている。
この機能は、具体的には次の2つの機能で構成される。
(1) アプリケーション設定をファイルに対して読み書きする機能
(2) アプリケーション設定をフォームにバインドする(結び付ける)機能
大まかにいうと、フォームの位置やサイズを.NET Frameworkが管理する「アプリケーション設定」の項目として作成し、(1)の機能によりファイルに対して読み書きを行う。(2)の機能では、それらの設定項目とフォームの位置やサイズを示すプロパティとを結び付けることによって、設定値がフォームのプロパティ値に反映されるようになる。
Visual Studio 2005を利用すれば、ほとんどコードを記述することなくこれらの機能をアプリケーションに実装できる。以下にその具体的な手順を示す。
フォームのプロパティ・バインディングの設定
まずWindowsアプリケーションのプロジェクトを新規作成する。そしてフォームをアプリケーションのデフォルトとなるサイズに調節しておく(これは後でも変更可能)。
次にフォームを選択した状態で、プロパティ・ウィンドウで[(ApplicationSettings)]の項目を開き、[(PropertyBinding)]の欄を選択してから、その右端にある[...]ボタンをクリックする(下図)。ここからアプリケーション設定の項目の追加と、フォームのプロパティへのバインドが行える。
プロパティ・ウィンドウの(PropertyBinding) | |||
[(ApplicationSettings)]を展開すると[(PropertyBinding)]が現れる。
|
[...]ボタンをクリックすると、次のような[アプリケーション設定]ダイアログが開く。
[アプリケーション設定]ダイアログ |
このダイアログではフォームの各プロパティにバインドするアプリケーション設定の項目を選択することができる。デフォルトではどのプロパティにもアプリケーション設定はバインドされていない。 |
ここではまず「Location」の項目を選択し、その右にあるドロップダウン・リストを開き、一番下にある「(新規)」をクリックする(下図)。「Location」はフォームの位置を取得/設定するLocationプロパティを意味している。
Locationプロパティのバインド設定 | ||||||
右端の[V]ボタンをクリックすると、Locationプロパティにバインド可能なアプリケーション設定の項目が一覧表示される(ここではアプリケーション設定の項目をまだ作成していないため、何も表示されない)。「(新規)」をクリックすることにより、アプリケーション設定の項目を新規作成できる。
|
これにより、次のようなダイアログが開くので「Name」に適当なアプリケーション設定の項目名を設定する(ここでは「MyLocation」とした)。また「DefaultValue」の欄でフォームの位置の初期値を設定できる。
[新しいアプリケーション設定]ダイアログ |
「Name」に適当なアプリケーション設定の項目名を設定する。「DefaultValue」にはアプリケーション起動時のフォームの位置を設定する。 |
「Location」に関しては以上で設定が完了だ。続けて、同様な操作をフォームのサイズを示す「ClientSize」に対しても行う(ここではその項目名を「MyClientSize」とした)。
VBの場合にはこれだけで作業が完了である。アプリケーションを実行し、位置やサイズを変更してからフォームを閉じてアプリケーションを終了し、再度実行すれば位置やサイズが保存されているはずだ。
C#の場合には、後述するようにアプリケーション設定を保存するためのコードを追加する必要がある。
プロジェクト・プロパティでのアプリケーション設定
アプリケーション設定の項目として追加した2つの項目は、プロジェクトのプロパティの[設定]タブから確認できる。追加した項目の初期値の修正はここで可能だ。
プロジェクトのプロパティの[設定]タブ |
プロパティ・ウィンドウから追加したアプリケーション設定の編集はここで行える。 |
アプリケーション設定の項目の追加をここで行ってから、フォームのプロパティへのバインドをプロパティ・ウィンドウで行うこともできるが、その場合にはこの画面で項目の型を手動で設定しなければならない。
なおアプリケーション設定の各項目には、スコープとして「ユーザー」と「アプリケーション」の2つがあるが、アプリケーション・スコープは基本的に読み取り専用であるため、今回の目的では利用できない。
C#の場合には明示的な保存処理が必要
C#の場合には、アプリケーション設定が自動的に保存されないため、アプリケーションを終了する前に明示的に保存しなければならない。
フォームが閉じられようとする場合にはFormClosingイベントが発生するため、そのイベント・ハンドラに次のようなSaveメソッドを呼び出すコードを記述すればよい。
|
|
FormClosingイベント・ハンドラでのアプリケーション設定の保存 |
ここで、Settingsクラス(Propertiesはその名前空間の名前)はVisual Studio 2005のデザイナが自動作成するクラス*であり、Defaultプロパティはそのインスタンスを取得するためのものだ。SettingsクラスはApplicationSettingsBaseクラス(System.Configuration名前空間)の派生クラスであり、Saveメソッドはそのクラスから継承されている。
* プロジェクトに含まれるSettings.Designer.csファイルで定義される。 |
アプリケーション設定の保存場所
最後にアプリケーション設定の保存場所についても簡単に見ておこう。スコープが「ユーザー」の場合には、これは以下のようなフォルダのファイルとして保存される(Windows XPがCドライブにインストールされている場合)。
C:\Documents and Settings\<ユーザー名>\Local Settings\Application Data\<会社名>\<製品名_ハッシュ値>\<バージョン>\user.config
ここで会社名や製品名、バージョンなどは、プロジェクトのプロパティを開き、[アプリケーション]タブの[アセンブリ情報]ボタンをクリックして開く[アセンブリ情報]ダイアログで設定できる*。
* ここで設定した情報はプロジェクトに含まれるAssemblyInfo.cs/AssemblyInfo.vbファイルに反映される。 |
具体的には、例えば次のようなパス名となる。
C:\Documents and Settings\taka-e\Local Settings\Application Data\DA\TestAppSettings.exe_Url_liix0c2dg4akq4ypuro4kqjpuukbzfml\1.0.0.0\user.config
なお、ハッシュ値の部分はEXEファイルのパスなどによっても変化するようだ。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:Windowsフォーム 処理対象:アプリケーション設定 使用ライブラリ:ApplicationSettingsBaseクラス(System.Configuration名前空間) |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|