Закройте все открытые формы, за исключением некоторых 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