フォームで直接ではなく、モジュールのサブメインでVB.NETで記述されたGUIプログラム(Windows用アプリケーション)を起動する理由はありますか?
編集:プログラムはコマンドラインパラメータを取りません、そしてそれは常にGUIプログラムとして実行されます。
VB .NET 1.xでMain()を使用する主な理由は、フォームが読み込まれる前に実行する必要のあるコードを追加するためでした。たとえば、 Windowsフォームアプリは既に読み込まれています。または、AppDomainの未処理の例外をインターセプトすることもできます。
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf MyExceptionFilter
しかし、次のバージョンのVBおよびVisualStudio 2005では新しい アプリケーションモデル が導入され、ほとんどのシナリオでMain()が不要になりました。 My.Application.Startup event フォームが読み込まれる前に実行する必要のあるコードを追加します。
Startupイベントハンドラーのコードは、デフォルトで非表示になっているApplicationEvents.vbファイルに格納されていることに注意してください。
どちらの方法でも実行できますが、実際には、操作とユーザーインターフェイス要素に直接関連する形式でのみコードを保持する必要がありますその形式で。アプリケーションの起動コードはUIとは関係がなく、通常はスプラッシュスクリーン、ネットワーク接続の確認、単一インスタンスのみの確認、ユーザー構成設定の設定などに関係します。
上記の項目(またはアプリの適切な初期化コード)が完了すると、Sub Mainはメインフォームのインスタンスを作成し、それを表示して、ユーザーがアプリケーションとの対話を開始できるようにします。
これにより、スタートアップコードがフォームコードから分離されます。後で、アプリケーションを保守しているときに、2つを分離してよかったと思います。
はい、私はそれを数回行いました。
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つから)
いいえ、常にそのフォームを表示したい場合は。
はい、GUIなしでアプリを使用したい場合は、コマンドラインを使用するだけです。