.NET TIPS Visual Basic 2005のアプリケーション・フレームワークとは?[VS 2005のみ、VB]デジタルアドバンテージ 遠藤 孝信2007/08/16 |
|
|
Visual Basic 2005(Visual Basic 2005 Express EditionあるいはVisual Studio 2005のVisual Basic。以下、VB 2005)でWindowsアプリケーションを作成する場合、プロジェクトのプロパティを開くと、既定で[アプリケーション フレームワークを有効にする]がオンになっている。
このアプリケーション・フレームワークが有効である場合には、その下にある「Windowsアプリケーション フレームワーク プロパティ」内にあるXP Visualスタイルや単一インスタンスのアプリケーションの作成といった機能が利用できるわけだが、このアプリケーション・フレームワークとは具体的にはどういうものなのだろうか。
一般的にアプリケーション・フレームワークとは、アプリケーション構築に必要となる一連の機能であるが、VB 2005のアプリケーション・フレームワークは、Microsoft.VisualBasic.ApplicationServices名前空間に属するクラス群であると考えてよいだろう。
この名前空間には次のような3つのクラスが含まれており、特にWindowsアプリケーションにおいては、WindowsFormsApplicationBaseクラス*にその主要な機能が実装されている。
*WindowsFormsApplicationBaseクラスは、ConsoleApplicationBaseクラスを継承しており、さらにこのクラスはApplicationBaseクラスを継承している。ConsoleApplicationBaseクラスはVB 2005でコンソール・アプリケーションを作成する場合に、そのアプリケーション・フレームワークとして使用される。 |
アプリケーション・フレームワークを利用しない場合には、VB 2005のWindowsアプリケーションの最も基本的な構造は次のようなものだ。
| |
リスト1 通常のWindowsフォーム・アプリケーションの基本構造(winform.vb) | |
プログラムの実行はMainメソッドからスタートする。Mainメソッドではフォームのインスタンスを作成し、それをパラメータにしてApplicationクラス(System.Windows.Forms名前空間)のRunメソッドを呼び出している。これによりフォームが表示され、ユーザーはフォームを操作できるようになる。
これに対して、VB 2005のアプリケーション・フレームワークを有効にした場合には、WindowsFormsApplicationBaseクラスが使用された次のような構造となる。
| |
リスト2 アプリケーション・フレームワークを有効にした場合の基本構造(vbappfx.vb) | |
この場合には、まずMainメソッドで「アプリケーション」のインスタンスを作成することになる。アプリケーションのインスタンスとは具体的には、WindowsFormsApplicationBaseクラスの派生クラス(このコードではMyApplicationクラス)のインスタンスである。
Mainメソッドでは、MyApplicationクラスのインスタンスを作成した後、そのRunメソッドを呼び出す。このRunメソッドはWindowsFormsApplicationBaseクラスから継承されたメソッドだ。
WindowsFormsApplicationBaseクラスでは、Runメソッドが呼び出されるとOnCreateMainFormメソッドを実行し*、MainFormプロパティに設定されているフォームが表示されるという仕組みがフレームワークの機能としてあらかじめ実装されている。
*実際にはまずOnRunメソッドが呼び出され、そこからOnCreateMainFormメソッドが実行される。OnRunメソッドもオーバーライド可能で、アプリケーションの初期化処理を記述できる。 |
このため上記のコードでは、OnCreateMainFormメソッドをオーバーライドし、その中でフォームのインスタンスをMainFormプロパティに設定している。
VB 2005のプロジェクトのプロパティには[アプリケーション イベントの表示]というボタンがある。
このボタンをクリックすると、上述したMyApplicationクラスに相当するクラスの部分クラス(Partialクラス)が記述されたファイル「ApplicationEvents.vb」が自動作成され開く。
この画面から分かるように、自動作成されるクラスはMy名前空間のMyApplicationクラスである。これにより、アプリケーション・フレームワークを有効にした場合に暗黙的に作成されるアプリケーション・インスタンスのためのクラスの名前は、実際にも「MyApplication」であることが分かる。
なおこのクラスは、自動作成されたコードのコメント文にあるように、アプリケーションにStartupイベントやShutdownイベントを追加したり、OnCreateMainFormメソッドをオーバーライドしたりするときに利用する。
ちなみに、VB 2005のMy機能の1つとして「My.Application」があるが、これにより参照されるオブジェクトは、このMyApplicationクラスのインスタンスと同じである*。
*アプリケーション・フレームワークを無効にした場合には、ConsoleApplicationBaseクラスを継承したクラスが自動作成され、そのインスタンスへの参照が「My.Application」の値となるようである。 |
では最後に、VB 2005のアプリケーション・フレームワークの機能の1つである、単一インスタンスのアプリケーションの作成(アプリケーションの多重起動の禁止)をコードから試してみよう(IDEから設定する場合には「TIPS:Visual Basic 2005でWindowsアプリケーションの多重起動を禁止するには?」を参照)。
この機能はWindowsFormsApplicationBaseクラスで実装されており、Boolean型のIsSingleInstanceプロパティの設定によりオン/オフできる。リスト2のコードで実際にこの機能を有効にするには、MyApplicationクラスに次のようなコンストラクタを追加すればよい。
| |
リスト3 多重起動を禁止するためにリスト2のMyApplicationクラスに追加するコンストラクタ |
プログラムを実行し、もう一度同じEXEファイルを実行しようとしても、1つ目のウィンドウがアクティブになるだけで、2つ目を起動できないのが確認できるはずだ。
VB 2005のプロジェクトのプロパティ(図1)で[単一インスタンスのアプリケーションを作成する]チェックボックスをオンにすると、このようなコードが自動生成されるというわけだ。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:Visual Studio 2005 処理対象:プロジェクト カテゴリ:Visual Basic 2005 処理対象:アプリケーション・フレームワーク 使用ライブラリ:WindowsFormsApplicationBaseクラス(Microsoft.VisualBasic.ApplicationServices名前空間) 使用ライブラリ:ConsoleApplicationClassクラス(Microsoft.VisualBasic.ApplicationServices名前空間) 使用ライブラリ:Applicationクラス(System.Windows.Forms名前空間) |
Insider.NET フォーラム 新着記事