0

こんにちは、私はプログラムの一部で立ち往生しています。画面を一度だけ起動してからメイン画面に移動したいのですが、ここに私のフォーム 1 のコードがあります

Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    My.Settings.Done = "Finished"
    My.Settings.Save()
    Me.Hide()
    Form2.Show()
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    If My.Settings.Done = "Finished" Then
        Me.Hide()
        Form2.Show()
    Else

    End If
End Sub

クラス終了

また、フォームのプロパティの設定に文字列変数を入れましたが、最初に実行しようとするたびに、常に 2 つのフォームが表示されます。ユーザーが最初にクリックした後にのみ、2 番目のフォームを表示するにはどうすればよいですか?ボタン?

ありがとう

4

1 に答える 1

1

これは 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
于 2012-10-07T13:23:53.587 に答える