1

Form1 と Form2 の 2 つのフォームがあります。
Form1 では、Button1 をクリックして新しいスレッドで Form2 を開きます。
Form2 のタイトルを設定したいのですが、それがどのように可能かわかりません。Form1 のコードは次のとおりです。 Form2 は単なる空のフォームです。

Public Class Form1
    Dim TH As New Threading.Thread(AddressOf FormShow)

    Private Shared Sub FormShow()
        Dim FF As New Form2
        FF.Show()
        Do While FF.Visible
            Threading.Thread.Sleep(100)
            Application.DoEvents()
        Loop
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        TH.Start()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        'How to change the Form2 title?
        'I need something like : TH.Form2.Text="NewTitle"?
    End Sub
End Class

コードを開始して Button1 をクリックすると、Form2 が開きます。しかし、Form1 で Button2 を押したときに Form2 のウィンドウ タイトルを変更するにはどうすればよいでしょうか。何か案は?ありがとう。

4

1 に答える 1

3

上記の私のコメントから:

正しいアプローチは、ワーク (フォームではない) を別のスレッドに移動することです。BackgroundWorker() コントロールを検索すると、10 億の例が得られます。

ただし、元の質問で必要なことを行うことは技術的に可能です。

Public Class Form1
Public Shared FF As New Form2

    Dim TH As New Threading.Thread(AddressOf FormShow)

    Private Sub FormShow()
        Application.Run(FF)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        TH.Start()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        If Not IsNothing(FF) AndAlso Not FF.IsDisposed Then
            FF.BeginInvoke(Sub(title)
                               FF.Text = title
                           End Sub, New Object() {"Hello"})
        End If
    End Sub

End Class

ただし、これは推奨される方法ではありません。

于 2013-11-07T21:25:15.617 に答える