Visual Basic 2005のアプリケーション・フレームワークとは?[VS 2005のみ、VB] − @IT

 

.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スタイルや単一インスタンスのアプリケーションの作成といった機能が利用できるわけだが、このアプリケーション・フレームワークとは具体的にはどういうものなのだろうか。

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」が自動作成され開く。

 この画面から分かるように、自動作成されるクラスは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名前空間)



TechTargetジャパン

Insider.NET フォーラム 新着記事

  • AngularJS (2016/2/12)
     AngularJSはJavaScript用のMVWフレームワークであり、「テンプレート」「データバインディング」などの機能を利用してWebアプリを簡潔に記述できる
  • WPF/UWP:テキストブロックの一部をデータバインド (2016/2/10)
     .NET 4以降のWPF/UWPアプリで、RunコントロールのTextプロパティを使い、テキストの一部の内容だけをユーザーの入力に応じて変更する方法を解説する
  • Forguncy 2のかゆいところに手が届く機能 (2016/2/9)
     今回はForguncy 2で追加された新機能のうち、リストビューの条件付き書式、ウィザードによるWebアプリの自動生成などの機能を見ていく
  • Forguncy 2のグラフ機能を使ってみる (2016/2/5)
     ExcelライクなノンプログラミングのWebアプリ開発ツール「Forguncy」の最新バージョンにはどんな機能が追加されたのかを見てみよう