Закройте все открытые формы, за исключением некоторых VB.Net - PullRequest
0 голосов
/ 01 января 2019

как заголовок, я пытаюсь закрыть все открытые формы, кроме некоторых в 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.

Ответы [ 2 ]

0 голосов
/ 01 января 2019

То же, что и ответ @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
0 голосов
/ 01 января 2019

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
...