.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アプリケーションを作成する場合、プロジェクトのプロパティを開くと、既定で[アプリケーション フレームワークを有効にする]がオンになっている。


図1 VB 2005のプロジェクトのプロパティ
ソリューション・エクスプローラ内でプロジェクトを右クリックしてメニューより[プロパティ]を実行するか、プロジェクト内にある「My Project」の項目をダブルクリックして開く。
  [アプリケーション フレームワークを有効にする]

 このアプリケーション・フレームワークが有効である場合には、その下にある「Windowsアプリケーション フレームワーク プロパティ」内にあるXP Visualスタイルや単一インスタンスのアプリケーションの作成といった機能が利用できるわけだが、このアプリケーション・フレームワークとは具体的にはどういうものなのだろうか。

Microsoft.VisualBasic.ApplicationServices名前空間のクラス

 一般的にアプリケーション・フレームワークとは、アプリケーション構築に必要となる一連の機能であるが、VB 2005のアプリケーション・フレームワークは、Microsoft.VisualBasic.ApplicationServices名前空間に属するクラス群であると考えてよいだろう。

 この名前空間には次のような3つのクラスが含まれており、特にWindowsアプリケーションにおいては、WindowsFormsApplicationBaseクラス*にその主要な機能が実装されている。

  • ApplicationBaseクラス
  • ConsoleApplicationBaseクラス
  • WindowsFormsApplicationBaseクラス
*WindowsFormsApplicationBaseクラスは、ConsoleApplicationBaseクラスを継承しており、さらにこのクラスはApplicationBaseクラスを継承している。ConsoleApplicationBaseクラスはVB 2005でコンソール・アプリケーションを作成する場合に、そのアプリケーション・フレームワークとして使用される。

 アプリケーション・フレームワークを利用しない場合には、VB 2005のWindowsアプリケーションの最も基本的な構造は次のようなものだ。

' winform.vb

Module Module1
  Sub Main()
    Dim MyForm As New MyFormClass()
    System.Windows.Forms.Application.Run(MyForm)
  End Sub
End Module

Class MyFormClass
  Inherits System.Windows.Forms.Form

End Class

' コンパイル方法:vbc /t:winexe winform.vb
リスト1 通常のWindowsフォーム・アプリケーションの基本構造(winform.vb)

 プログラムの実行はMainメソッドからスタートする。Mainメソッドではフォームのインスタンスを作成し、それをパラメータにしてApplicationクラス(System.Windows.Forms名前空間)のRunメソッドを呼び出している。これによりフォームが表示され、ユーザーはフォームを操作できるようになる。

 これに対して、VB 2005のアプリケーション・フレームワークを有効にした場合には、WindowsFormsApplicationBaseクラスが使用された次のような構造となる。

' vbappfx.vb

Module Module1
  Sub Main(ByVal args As String())
    Dim myApp As New MyApplication()
    myApp.Run(args)
  End Sub
End Module

Class MyApplication
  Inherits Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
  Protected Overrides Sub OnCreateMainForm()
    Me.MainForm = New MyForm()
  End Sub
End Class

Class MyForm
  Inherits Windows.Forms.Form

End Class

' コンパイル方法:vbc /t:winexe vbappfx.vb
リスト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」が自動作成され開く。


図2 ApplicationEvents.vbに記述されたMyApplicationクラスの部分クラス
VB 2005のプロジェクトのプロパティで[アプリケーション イベントの表示]ボタンをクリックするとApplicationEvents.vbが自動作成されて、エディタで開かれる。

 この画面から分かるように、自動作成されるクラスはMy名前空間のMyApplicationクラスである。これにより、アプリケーション・フレームワークを有効にした場合に暗黙的に作成されるアプリケーション・インスタンスのためのクラスの名前は、実際にも「MyApplication」であることが分かる。

 なおこのクラスは、自動作成されたコードのコメント文にあるように、アプリケーションにStartupイベントやShutdownイベントを追加したり、OnCreateMainFormメソッドをオーバーライドしたりするときに利用する。

 ちなみに、VB 2005のMy機能の1つとして「My.Application」があるが、これにより参照されるオブジェクトは、このMyApplicationクラスのインスタンスと同じである*

*アプリケーション・フレームワークを無効にした場合には、ConsoleApplicationBaseクラスを継承したクラスが自動作成され、そのインスタンスへの参照が「My.Application」の値となるようである。

IsSingleInstanceプロパティによる多重起動の禁止

 では最後に、VB 2005のアプリケーション・フレームワークの機能の1つである、単一インスタンスのアプリケーションの作成(アプリケーションの多重起動の禁止)をコードから試してみよう(IDEから設定する場合には「TIPS:Visual Basic 2005でWindowsアプリケーションの多重起動を禁止するには?」を参照)。

 この機能はWindowsFormsApplicationBaseクラスで実装されており、Boolean型のIsSingleInstanceプロパティの設定によりオン/オフできる。リスト2のコードで実際にこの機能を有効にするには、MyApplicationクラスに次のようなコンストラクタを追加すればよい。

Sub New()
  Me.IsSingleInstance = True ' 多重起動を禁止
End Sub
リスト3 多重起動を禁止するためにリスト2のMyApplicationクラスに追加するコンストラクタ

 プログラムを実行し、もう一度同じEXEファイルを実行しようとしても、1つ目のウィンドウがアクティブになるだけで、2つ目を起動できないのが確認できるはずだ。

 VB 2005のプロジェクトのプロパティ(図1)で[単一インスタンスのアプリケーションを作成する]チェックボックスをオンにすると、このようなコードが自動生成されるというわけだ。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Visual Studio 2005 処理対象:プロジェクト
カテゴリ:Visual Basic 2005 処理対象:アプリケーション・フレームワーク
使用ライブラリ:WindowsFormsApplicationBaseクラス(Microsoft.VisualBasic.ApplicationServices名前空間)
使用ライブラリ:ConsoleApplicationClassクラス(Microsoft.VisualBasic.ApplicationServices名前空間)
使用ライブラリ:Applicationクラス(System.Windows.Forms名前空間)

この記事と関連性の高い別の.NET TIPS
Visual Basic 2005で独自のMainメソッドを使用するには?
Visual Basic 2005で多重起動禁止時にメッセージを出すには?
Visual Basic 2005でWindowsアプリケーションの多重起動を禁止するには?
Visual Basic 2005でスプラッシュ・スクリーンの表示時間を変更するには?
VB.NETでアプリケーション起動時に実行されるフォームを変更するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間