忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

VB.NET:アプリケーションのエントリポイント(Mainメソッド)について
アプリケーションのエントリポイントとは、そのアプリケーションが開始した時に、呼び出されるメソッドのことです。

VB.NETでは、Mainメソッドがエントリポイントですが、 WindowsフォームアプリケーションプロジェクトにはMainメソッドが見当たりません。 エントリポイントであるMainメソッドは、コンパイラによって自動的に作成されます。 以下の様にプロジェクトのプロパティ設定で「スタートアップ オブジェクト」を Form1 に 設定すれば自動でMainメソッドが生成され、その中で Form1 を生成し、表示する様になっています。



しかし、 Form1 の表示前に何かをしたいことがある場合、 例えば、アプリケーションの二重起動のチェックだとか、データベースのオープン処理などがあります。 その場合には、新しいモジュールかクラスを追加し、その中に Sub Main を宣言します。 以下は Sub Main をモジュールに宣言したときの例です。
(ファイル名は MainModule.vb としました)

Module MainModule
    'アプリケーションのメイン・エントリポイント
    <STAThread()> Sub Main()
        '-----
        'メインフォームを表示する前に必要な初期処理を行う・・・
        '-----
        '例:二重起動をチェックする
        If Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName).Length > 1 Then
            MessageBox.Show("多重起動はできません。")
            Return
        End If

        'メイン画面の表示(ここでは例としてForm1の表示)
        Dim frm As New Form1
        Application.Run(frm)

        '-----
        'メインフォームが閉じた後で必要な終了処理を行う・・・
        '-----
    End Sub
End Module

尚、この MainModule を有効にするには、プロジェクトのプロパティ設定で 以下の様にする必要があります。

「アプリケーションフレームワークを有効にする」のチェックを外し無効にします。
無効にすることで、「スタートアップ オブジェクト」のコンボボックスに  MainModule が現れますので、それを選びます。

モジュールではなく、クラスで行う場合は以下の様になります。
Public Class ClsMain
    'アプリケーションのメイン・エントリポイント
    <STAThread()> Shared Sub Main()
        '-----
        'メインフォームを表示する前に必要な初期処理を行う・・・
        '-----
        '例:二重起動をチェックする
        If Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName).Length > 1 Then
            MessageBox.Show("多重起動はできません。")
            Return
        End If

        'メイン画面の表示(ここでは例としてForm1の表示)
        Dim frm As New Form1
        Application.Run(frm)

        '-----
        'メインフォームが閉じた後で必要な終了処理を行う・・・
        '-----
    End Sub
End Class

このソースの例では、二重起動のチェックを行っていますが、その他、データベースのオープン等 メイン画面が表示される前までに行いたい処理を、初期処理の部分に記述できます。


=====
2016/04/02:の時の情報











PR

コメント

コメントを書く