共用方式為


HOW TO:存取應用程式的所有開啟表單

更新:2007 年 11 月

這個範例會使用 My.Application.OpenForms 屬性 (Property),顯示所有應用程式之開啟表單的標題。

不論是由哪個執行緒開啟表單,My.Application.OpenForms 屬性都會傳回所有目前開啟的表單。這表示您應該在存取表單之前,檢查每個表單的 InvokeRequired 屬性,否則會擲回 InvalidOperationException 例外狀況。

這個範例會宣告以安全執行緒方法取得每個表單標題的函式。首先,會檢查表單的 InvokeRequired 屬性,然後視需要使用 BeginInvoke 方法,執行表單執行緒上的函式。然後,該函式會傳回表單的標題。

範例

這個範例會對應用程式的開啟表單執行迴圈,並在 ListBox 控制項中顯示表單的標題。如需只顯示從目前執行緒直接存取之表單的簡易程式碼,請參閱 My.Application.OpenForms 屬性

Private Sub GetOpenFormTitles()
    Dim formTitles As New Collection

    Try
        For Each f As Form In My.Application.OpenForms
            ' Use a thread-safe method to get all form titles.
            formTitles.Add(GetFormTitle(f))
        Next
    Catch ex As Exception
        formTitles.Add("Error: " & ex.Message)
    End Try

    Form1.ListBox1.DataSource = formTitles
End Sub

Private Delegate Function GetFormTitleDelegate(ByVal f As Form) As String
Private Function GetFormTitle(ByVal f As Form) As String
    ' Check if the form can be accessed from the current thread.
    If Not f.InvokeRequired Then
        ' Access the form directly.
        Return f.Text
    Else
        ' Marshal to the thread that owns the form. 
        Dim del As GetFormTitleDelegate = AddressOf GetFormTitle
        Dim param As Object() = {f}
        Dim result As System.IAsyncResult = f.BeginInvoke(del, param)
        ' Give the form's thread a chance process function.
        System.Threading.Thread.Sleep(10)
        ' Check the result.
        If result.IsCompleted Then
            ' Get the function's return value.
            Return "Different thread: " & f.EndInvoke(result).ToString
        Else
            Return "Unresponsive thread"
        End If
    End If
End Function

請參閱

工作

HOW TO:進行對 Windows Form 控制項的安全執行緒呼叫

參考

My.Application.OpenForms 屬性