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())

は許可されていないコレクションを変更するFor Eachため、上記のクエリでa を使用することはできません。したがって、私は使用します。Form.CloseList.ForEach

于 2014-07-21T12:20:48.007 に答える