VB.NETの場合、フォームを表示する場合にはプロジェクトプロパティの中の設定でスタートアップオブジェクトを 対象となるフォームを選択して実行すれば、そのフォームが最初に表示されます。 以下の図は、スタートアップオブジェクトをForm1に設定したところを示します。
簡単なプログラムであればこの方法で良いのですが、いきなりフォームが表示されては困ることもあります。 フォームが表示される前に行いたい処理がいろいろあったりします。 そこで、プログラムの開始位置であるエントリポイントを変更することで、 フォームの表示前に処理が出来る様になります。
以下のソースを見て下さい。Main関数を定義したモジュールファイルを作成します。 先ほどのスタートアップオブジェクトをこのMain関数に設定することで プログラムのエントリポイントがMain関数になります。 つまり、プログラムはMain関数から開始されることになります。
エントリポイントをSub Mainにする
Module MdlMain <STAThread()> _ Sub Main() '===== '初期処理... '===== 'フォーム表示 Dim frmForm1 As New Form1 Application.Run(frmForm1) End Sub End Module
もしフォーム表示前の処理を行いたい場合には、Application.Runの前までに記述します。 私が組んだプログラムでは、以下の様な処理を行ったりしました。
- プログラムの二重起動を抑制する。
- プログラム起動の引数の取得とチェックを行う。
- ログ出力の初期処理を行う。
- データベースのオープン処理を行い、エラーの場合は処理を中断する。
尚、以下の図はプロジェクトプロパティの中の設定でスタートアップオブジェクトを Sub Mainに設定したところを示します。
VB.NETでは、Mainメソッド(またはプロシージャ)がエントリポイントです。ところが、Windowsフォームアプリケーションプロジェクトのどこを探してもMainメソッドがありません。エントリポイントとなるMainメソッドは、コンパイラによって自動的に作成されます。 補足:Visual Studio 2005以降では、「アプリケーションフレームワークを有効にする」を無効にしないと、本当のエントリポイントを変更することはできません。「アプリケーションフレームワークを有効にする」を有効にしたときのエントリポイントは、MyApplicationクラスのMainメソッドとなるようです。
モジュールでファイルではなく、クラスファイルに以下の様にShared Sub Main関数を宣言しても同じことができます。
エントリポイントをクラスのSub Mainにする
Public Class ClsMain <STAThread()> _ Shared Sub Main() Application.Run(New Form1) End Sub End Class
関連する記事
⇒フォームの位置設定を行う処理 :[Screen.PrimaryScreen.WorkingArea]⇒フォームクラスにプロパティ宣言し外からアクセスする方法
⇒親フォームのコントロールを子フォームからアクセスする方法
⇒フォームが閉じるのをキャンセルする方法:[FormClosingEventArgs,Cancel]
⇒フォームの表示をモジュールのMain関数から行う(エントリポイントの変更)
⇒フォームがKeyDownなどのキーイベントを受取り、ファンクションキー処理をする
⇒最初のフォームActivatedイベントでの処理(1回のみしか処理しない様にする)
⇒初回のフォームActivatedイベント発生させるフォーム継承について
コメント