Закройте все открытые формы, за исключением некоторых VB.Net

В качестве заголовка я пытаюсь закрыть все открытые формы, кроме некоторых в VB.Net, но формы не закрываются. Вот код, который я использовал:

Dim lista As New FormCollection
lista = Application.OpenForms
For Each a As Form In lista
    If Not a.Text = "formLogout" And a.Text = "arresto" And a.Text = "riavvio" And a.Text = "formOpen" Then
        a.Close()
    End If
Next
scrivania.Close()
Me.Close()

Grazie.

4 ответа

Решение

If оператор вернет true, когда все предоставленные условия верны, что невозможно, потому что вы сравниваете form.Text с разными значениями.
Обратите внимание, что в вашем примере Not будет применяться только для первого условия

Вы можете переписать условие следующим образом:

If Not (form.Text = "formLogout" OrElse form.Text = "arresto") Then ..

Предложите использовать коллекцию имен форм, которая не должна закрываться

Dim remainOpenForms As New HashSet(Of String)
remainOpenForms.Add("formLogout")
remainOpenForms.Add("arresto")

' Create collection of forms to be closed
Dim formsToClose As New List(Of Form)
For Each form As Form In Application.OpenForms
    If remainOpenForms.Contains(form.Text) = False Then formsToClose.Add(form)
Next

For Each form As Form In formsToClose
    form.Close()
Next

То же, что и ответ @Fabio без дополнительной коллекции и цикла.

    Dim keepOpen As New List(Of String) From {Me.Text, Form2.Text, Form3.Text}
    For index = Application.OpenForms.Count - 1 To 0 Step -1
        If Not keepOpen.Contains(Application.OpenForms(index).Text) Then
            Application.OpenForms(index).Close()
        End If
    Next

Я заменил форму. toString с формой. Имя из решения Фабио, и оно сработало как шарм!

          Try
        Dim remainOpenForms As New HashSet(Of String)
        remainOpenForms.Add("FormMainMenu")

        Dim formsToClose As New List(Of Form)
        For Each form As Form In Application.OpenForms
            If Not remainOpenForms.Contains(form.Name) Then
                formsToClose.Add(form)
                Debug.Print("closing: " & form.Name)
            Else
                Debug.Print("keep open: " & form.Name)
            End If
        Next

        For Each form As Form In formsToClose
            form.Close()
        Next

        Close()
    Catch ex As Exception
        WriteErrors("FMM: WAN2", ex.ToString)
    End Try

Если вам интересно, почему я закрыл его после того, как: я получил InvalidOperationException Коллекция была изменена. Это мой модуль приложения Exit

Я знаю, что это слишком поздно, но для некоторых вот мой ответ

это закрывает все формы кроме "exceptthisform"

     Dim formNames As New List(Of String)

        For Each currentForm As Form In Application.OpenForms

            If currentForm.Name <> "exceptthisform" Then

                formNames.Add(currentForm.Name)

            End If

        Next

        For Each currentFormName As String In formNames
            Application.OpenForms(currentFormName).Close()

        Next
Другие вопросы по тегам