.NET TIPS バージョン情報ダイアログを作成するには?デジタルアドバンテージ 一色 政彦2005/04/01 |
|
|
Windowsアプリケーションでは、実行中のアプリケーションが一体どのバージョンなのかを、ユーザーが簡単に調べられるように、[バージョン情報]ダイアログを用意することが一般的だ。この[バージョン情報]ダイアログは、メイン画面のメニュー・バーから表示できるようにすることが多い。
例えばWindows標準のテキスト・エディタである「メモ帳」では、メニュー・バーの[ヘルプ]−[バージョン情報]から、次の画面のような[メモ帳のバージョン情報]ダイアログを表示できる。
[メモ帳のバージョン情報]ダイアログ | ||||||
[スタート]メニューの[すべてのプログラム]−[アクセサリ]−[メモ帳]からメモ帳を起動し、その[バージョン情報]ダイアログを起動したところ。 | ||||||
|
本稿では、このような[バージョン情報]ダイアログを作成する方法を紹介する。
Windowsアプリケーションの[バージョン情報]ダイアログの作成方法
まずはダイアログをモーダルで作成して、それをアプリケーションのメイン画面のメニュー・バーなどから呼び出す必要がある。この実装についてはここでは割愛する。モーダル・モードのダイアログを構築する方法については「TIPS:モーダル・ダイアログやモードレス・ダイアログを表示するには?」を参照してほしい。
次に作成したダイアログ上にバージョン情報を表示する。本稿では次のようなダイアログ画面を構築することにしよう。
本稿で作成する[バージョン情報]ダイアログ | |||||||||||||||||||||
この[バージョン情報]ダイアログでは、アプリケーションの製品名やバージョンなどに関する情報が表示されている。 | |||||||||||||||||||||
|
上記の画面のとおりに、PictureBoxコントロール、Labelコントロール、Buttonコントロールを配置してほしい。の[OK]ボタンに関しては、Clickイベント・ハンドラを追加して、そこでフォームのCloseメソッドを呼び出すことで、ダイアログが閉じられるようにしておこう。
ダイアログ上に表示されているバージョン情報については、本稿では、ハード・コーディングで設定するのではなく、アセンブリに指定されている既存のバージョン情報を利用する。このようにすることでバージョン情報の記述を1カ所で集中管理できるようになり、バージョン情報を複数個所に記述した場合に発生しがちな変更漏れを防げる。つまり、バージョン情報を更新した場合も、この[バージョン情報]ダイアログには一切手を触れる必要がなくなるのだ。
なおここで「既存のバージョン情報」と呼んでいるものは、Visual Studio .NETでプロジェクトを作成した場合に生成されるAssemblyInfo.cs(C#の場合)もしくはAssemblyInfo.vb(VB.NETの場合)という名前のファイル内で指定されたアセンブリ属性の情報のことだ。このアセンブリ属性の指定内容については、「TIPS:アセンブリにバージョン情報を設定するには?」を参照していただきたい。
それではアセンブリからのバージョン情報の取得方法について説明していこう。
アセンブリからのバージョン情報を取得するには?
●<会社名>/<製品名>/<バージョン名>
<会社名>/<製品名>/<バージョン名>の取得は、Applicationクラス(System.Windows.Forms名前空間)のプロパティとして用意されているので、その実装は非常に簡単だ。具体的に次のようなコードにより取得できる。
// C# |
' VB.NET |
これにより、上記画面の のテキストについては設定できる。
ちなみに、バージョン名を文字列ではなく、Versionクラス(System名前空間)のオブジェクトとして取得したい場合には、次のようなコードを記述すればよい。
なお上記のバージョン名はAssemblyInformationalVersion属性の値であるのに対し、下記のものはAssemblyVersion属性の値だ。これらの値は、AssemblyVersion属性のみを指定している場合には(つまり通常は)一致するが、AssemblyFileVersion属性やAssemblyInformationalVersion属性を指定している場合には異なってくる可能性がある。これについては前掲のTIPSを参照してほしい。
// C# |
' VB.NET |
このVB.NETのコードで、Assemblyクラスの記述が[]で囲まれているのは、VB.NETのAssemblyキーワードとの重複を回避するためだ(これについては「TIPS:C#やVB.NETでキーワードを識別子として使用するには?」を参照してほしい)。
●<コピーライト>/<説明記述>
<コピーライト>と<説明記述>の取得は少しやっかいだ。これらの情報はプロパティが用意されていないので、アセンブリから直接取得する必要がある。
具体的にはまず、Assemblyクラス(System.Reflection名前空間)のGetEntryAssemblyメソッドにより、エントリ・ポイントを含むアセンブリ(Assemblyオブジェクト)を取得する。多くの実行ファイル(.EXEファイル)においては、これはMainメソッドを含んだアセンブリとなっている。
次にそのAssemblyオブジェクトのGetCustomAttributesメソッドを利用して、AssemblyCopyright属性(System.Reflection名前空間)の情報(=<コピーライト>の情報)と、AssemblyDescription属性(System.Reflection名前空間)の情報(=<説明記述>の情報)を取得する。このGetCustomAttributesメソッドの使い方についてはMSDNの「Assembly.GetCustomAttributes メソッド」を参照されたい。
具体的な実装コードの例は次のとおりだ。
// C# |
' VB.NET |
これにより、上記画面の のテキストを設定できる。
●アプリケーション・アイコン
アプリケーション・アイコンの取得方法については「TIPS:実行ファイルからアプリケーションのアイコンを取得するには?」を参照していただきたい。注意点としては、アプリケーション・アイコンを取得するファイルへのパスが、そのアプリケーション自体であることだ。このパスは、AssemblyオブジェクトのLocationプロパティより取得できる。
具体的には、次のようなコードを記述すればよい。
// C# |
' VB.NET |
これにより、上記画面の のアイコン画像を設定できる。
バージョン情報を設定するには?
後は取得したこれらの情報を次のようなコードにより各コントロールに対して設定すれば完成だ。
// C# |
' VB.NET |
以上のコード内容で作成したサンプルの[バージョン情報]ダイアログは、下のリンクよりダウンロードできる。
このサンプルを利用して、ぜひ独自の[バージョン情報]ダイアログを作成してほしい。
カテゴリ:Windowsフォーム 処理対象:ダイアログ・ボックス 使用ライブラリ:Applicationクラス(System.Windows.Forms名前空間) 使用ライブラリ:Versionクラス(System名前空間) 使用ライブラリ:Assemblyクラス(System.Reflection名前空間) 使用ライブラリ:AssemblyInformationalVersion属性(System.Reflection名前空間) 使用ライブラリ:AssemblyProduct属性(System.Reflection名前空間) 使用ライブラリ:AssemblyCompany属性(System.Reflection名前空間) 使用ライブラリ:AssemblyCopyright属性(System.Reflection名前空間) 使用ライブラリ:AssemblyDescription属性(System.Reflection名前空間) 関連TIPS:モーダル・ダイアログやモードレス・ダイアログを表示するには? 関連TIPS:アセンブリにバージョン情報を設定するには? 関連TIPS:C#やVB.NETでキーワードを識別子として使用するには? 関連TIPS:実行ファイルからアプリケーションのアイコンを取得するには? |
|
「.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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|