これは Winforms の癖です。Form.Hide() メソッドは、Visible プロパティを False に設定します。Visible プロパティは、Winforms では非常に重要です。典型的な .NET スタイルでは、フォームのネイティブ ウィンドウはできるだけ遅く作成されます。ワゴンを動かすのは Visible プロパティで、これを true に設定すると、コードの大規模なチェーンがトリガーされます。フォームのネイティブ ウィンドウとすべてのコントロールのネイティブ ウィンドウの作成、必要に応じた自動スケーリングを含みます。そして、Load イベントがトリガーされます。
ここで、Visible が True に設定されているため、Load イベントがトリガーされます。Load イベント ハンドラーで False に設定しても効果はなく、最初に発生した理由が「元に戻されます」。このように説明するとある程度は理にかなっていますが、もちろん、この動作に遭遇するとほとんど意味がありません.
コードが機能したとしても、コードによって引き起こされる問題は他にもあります。まだ非表示のフォームがあります。ユーザーが唯一の表示されているウィンドウを閉じても、プログラムを実行し続けます。それは良いことではありません。
機能することの 1 つは、フォームを閉じることです。設定を変更する必要があります。プロジェクト + プロパティ、アプリケーション タブ。シャットダウン モード オプションを「最後のフォームが閉じられたとき」に変更します。これで、次のように記述できます。
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
If My.Settings.Done = "Finished" Then
Form2.Show()
Me.Close()
End If
End Sub
しかし、よりクリーンな解決策は、表示する正しい最初のフォームを選択することです。[プロジェクト + プロパティ] の [アプリケーション] タブで、[アプリケーション イベントの表示] ボタンをクリックします。スタートアップ イベントを追加します。
Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
If My.Settings.Done = "Finished" Then Me.MainForm = New Form2()
End Sub