0
  • 下面给出的是我写的代码

    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 循环,有时在通过 for 循环进行迭代时需要花费)我认为会有另一种好方法,请为我​​提出一个好的解决方案

注意:我已经在 SO 中看到了这个问题

4

1 回答 1

2

您可以使用 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())

您不能将 aFor Each与上面的查询一起使用,因为会修改不允许Form.Close的集合。因此我使用.List.ForEach

于 2014-07-21T12:20:48.007 回答