|
2025/03/03(Mon) 13:34:12 編集(投稿者)
■No103571 (tako さん) に返信 > VS2022を使って、VB.NETでプログラムを開発しているのですが、 > プログラム起動時にフォーム表示前にコードを実行したいと考えています。
フォーム起動前の処理を書きたい場合は、ApplicationEvents.vb にて、 MyApplication の Startup イベントを仕込めば、事前処理を記述できます。 このとき、e.Cancel プロパティに True を仕込めむことで、 フォームの起動を中止してアプリケーションを終了させることもできます。
また、プロジェクトのプロパティで「単一インスタンス アプリケーション」を有効にしていた場合は、 StartupNextInstance イベントも利用できます。
ちなみに .NET Framework の場合は、プロジェクトのプロパティの [アプリケーション]タブの[アプリケーション イベントの表示]に、上記と同じものがあります。
この MyApplication クラスを使うには、プロジェクトのプロパティで [アプリケーション フレームワーク]を有効にしておく必要があります。
一方、Sub Main から起動させたい場合はその逆で、[アプリケーション フレームワーク]を無効化せねばなりません。 先述の MyApplication (≠My.Application)のイベント定義があれば削除してから、 [アプリケーション フレームワーク]を無効化させたのち、ソリューション エクスプローラーで プロジェクトファイルをダブルクリックして、*.vbproj を XML モードで開いて、 /Project/PropertyGroup/MyType を WindowsForms ではなく WindowsFormsWithCustomSubMain であることを確認した後、 /Project/PropertyGroup/StartupObject を削除します。
念のため保存してプロジェクトを閉じ、プロジェクトフォルダーに bin および obj フォルダーがあれば、 それらをいったん削除してからプロジェクトを開きなおします。
これで、Sub Main から始めることができますが、VB の WinForms の場合は Main を自作するのではなく、Startup イベントを使った方が安全かと思います。
> <STAThread()> _ VB の場合、この属性を明示的に付与せずとも、自動的に System.Threading.Thread.CurrentThread.ApartmentState は STA になります。
> Sub Main() > Application.Run(New Form1()) > End Sub EnableVisualStyles / SetCompatibleTextRenderingDefault を使わないのは意図的なものですか?
|