Перебирать открытые формы и закрывать только определенные формы

  • ниже приведен код, который я написал

    Private Sub CloseTransactionForms()
      Dim ActiveFroms As New List(Of String)
      Dim formToClose As New List(Of Form)
      Dim j As Integer
      ActiveFroms.Add("FrmSale")
      ActiveFroms.Add("FrmpPurchase")
      ActiveFroms.Add("FrmSaleReturn")
      ActiveFroms.Add("FrmPurchaseReturn")
        Try
          For Each frm As Form In My.Application.OpenForms
            For j = 0 To ActiveFroms.Count - 1
                If frm.Name.ToString() = ActiveFroms.Item(j) Then
                    formToClose.Add(frm)
                End If
            Next
        Next
        If formToClose.Count > 0 Then
            Dim i As Integer
            For i = 0 To formToClose.Count - 1
                Dim xform As Form = formToClose.Item(i)
                xform.Close()
            Next
        End If
      Catch ex As Exception
     End Try
    End Sub
    
  • этот код будет перебирать открытые формы в моем приложении и закрывать определенные формы из приложения

  • но мне кажется, что это нехорошо (использование 3 для циклов в нем, и иногда это происходило при переборе цикла for), я думаю, что найдется другой хороший метод, пожалуйста, предложите хорошее решение для меня

Примечание: я уже видел этот вопрос в SO

1 ответ

Решение

Вы можете использовать LINQ, чтобы найти формы, которые вы хотите закрыть и List.ForEach закрыть их:

Dim ActiveFroms = New List(Of String) From {"FrmSale", "FrmpPurchase", "FrmpSaleReturn", "FrmPurchaseReturn"}

Dim formsToClose = From form In My.Application.OpenForms.Cast(Of Form)()
                   Join activeFormName In ActiveFroms
                   On form.Name Equals activeFormName
                   Select form

formsToClose.ToList().ForEach(Sub(form) form.Close())

Вы не можете использовать For Each с запросом выше, потому что Form.Close изменит коллекцию, которая не разрешена. Поэтому я использую List.ForEach,

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