web-dev-qa-db-ja.com

サブメインまたはフォーム起動オブジェクトを使用してVB.NETGUIアプリを起動しますか?

フォームで直接ではなく、モジュールのサブメインでVB.NETで記述されたGUIプログラム(Windows用アプリケーション)を起動する理由はありますか?

編集:プログラムはコマンドラインパラメータを取りません、そしてそれは常にGUIプログラムとして実行されます。

13
ggf31416

VB .NET 1.xでMain()を使用する主な理由は、フォームが読み込まれる前に実行する必要のあるコードを追加するためでした。たとえば、 Windowsフォームアプリは既に読み込まれています。または、AppDomainの未処理の例外をインターセプトすることもできます。

AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf MyExceptionFilter

しかし、次のバージョンのVBおよびVisualStudio 2005では新しい アプリケーションモデル が導入され、ほとんどのシナリオでMain()が不要になりました。 My.Application.Startup event フォームが読み込まれる前に実行する必要のあるコードを追加します。

Startupイベントハンドラーのコードは、デフォルトで非表示になっているApplicationEvents.vbファイルに格納されていることに注意してください。

15
RoadWarrior

どちらの方法でも実行できますが、実際には、操作とユーザーインターフェイス要素に直接関連する形式でのみコードを保持する必要がありますその形式で。アプリケーションの起動コードはUIとは関係がなく、通常はスプラッシュスクリーン、ネットワーク接続の確認、単一インスタンスのみの確認、ユーザー構成設定の設定などに関係します。

上記の項目(またはアプリの適切な初期化コード)が完了すると、Sub Mainはメインフォームのインスタンスを作成し、それを表示して、ユーザーがアプリケーションとの対話を開始できるようにします。

これにより、スタートアップコードがフォームコードから分離されます。後で、アプリケーションを保守しているときに、2つを分離してよかったと思います。

5
JeffK

はい、私はそれを数回行いました。

1つの理由は、アプリがCOM EXE(VB6の観点から話す)の場合、EXEがどのコンテキストで呼び出されているか(起動されているか、他のアプリによって話されているか)を検出できるようにする必要があるためです。

例えば:

Sub Main()
    If App.StartMode = vbSModeAutomation Then
        ...
    Else
        ...
    End If
End Sub

もう1つは、アプリで任意のコマンドラインパラメーターを処理できるようにする場合です。

例えば:

Sub Main()
    If App.PrevInstance Then End
    If InStr(Command, "/s") > 0 Then
        Form1.Show
    ElseIf InStr(Command, "/p") > 0 Then
        LoadPicture ("c:\windows\Zapotec.bmp")
    End If
End Sub

(スクリーンセーバーを作成しようとした私の試みの1つから)

2
bugmagnet

いいえ、常にそのフォームを表示したい場合は。
はい、GUIなしでアプリを使用したい場合は、コマンドラインを使用するだけです。

0
Arvo