WindowsFormsApplicationBase.OpenForms Property     
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Gets a collection of all the application's open forms.
public:
 property System::Windows::Forms::FormCollection ^ OpenForms { System::Windows::Forms::FormCollection ^ get(); };public System.Windows.Forms.FormCollection OpenForms { get; }member this.OpenForms : System.Windows.Forms.FormCollectionPublic ReadOnly Property OpenForms As FormCollectionProperty Value
A collection that contains all of the application's open forms.
Examples
This example loops over the application's open forms, selects the ones directly accessible by the current thread, and displays their titles in a ListBox control. This example requires that your Windows Forms application have a form named Form1 that contains a list box named ListBox1.
Private Sub GetOpenFormTitles()
    Dim formTitles As New Collection
    Try
        For Each f As Form In My.Application.OpenForms
            If Not f.InvokeRequired Then
                ' Can access the form directly.
                formTitles.Add(f.Text)
            End If
        Next
    Catch ex As Exception
        formTitles.Add("Error: " & ex.Message)
    End Try
    Form1.ListBox1.DataSource = formTitles
End Sub
This example loops over the application's open forms and displays their titles in a ListBox control.
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(f As Form) As String
Private Function GetFormTitle(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
Remarks
The My.Application.OpenForms property gets a collection of all the application's open forms. The behavior is identical to the Application.OpenForms property.
Note
The My.Application.OpenForms property returns all open forms, regardless of which thread opened them. You should check the InvokeRequired property of each form before accessing it; otherwise, it might throw an InvalidOperationException exception.
Availability by Project Type
| Project type | Available | 
|---|---|
| Windows Forms Application | Yes | 
| Class Library | No | 
| Console Application | No | 
| Windows Forms Control Library | No | 
| Web Control Library | No | 
| Windows Service | No | 
| Web Site | No |