Перебирать открытые формы и закрывать только определенные формы
ниже приведен код, который я написал
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
,