仅遍历打开的表单并关闭特定的表单

Posted

技术标签:

【中文标题】仅遍历打开的表单并关闭特定的表单【英文标题】:iterate through open forms and close particular forms only 【发布时间】:2014-07-21 12:13:42 【问题描述】:

下面是我写的代码

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

此代码将遍历我的应用程序中打开的表单并关闭应用程序中的定义的表单

1234563

注意:我已经看过this question in SO

【问题讨论】:

这看起来像您链接的问题的副本,并且还不清楚您在问什么。为什么代码看起来“不适合你”?您也许可以使用 LINQ (IEnumerable.Any) 更优雅地过滤表单,但这与关闭表单没有太大关系。 duplicate > 不是因为在我的情况下,我只需要关闭openfoms 的 4 个表格 .... 对你不利 > 因为你可以看到我在该代码中使用了 3 for loop 您修改了正在迭代的集合。结果总是很糟糕。您必须将其从 Count-1 向后迭代到 0 以避免发生意外。 @Hans:他实际上是在创建一个单独的表单列表来关闭。 好吧,不知道“vlose”应该是什么意思:) 【参考方案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 将修改集合which is not allowed。因此我使用List.ForEach

【讨论】:

我几乎写完了同样的东西,所以我冒昧地将初始化部分添加到您的答案中。 @TimSchmelter formsToClose.ToList().ForEach(Sub(form) form.Close()) 是否正确?我在sub上得到Expression Expected 您使用的是哪个版本的 Vb.Net? @TimSchmelter Visual Studio 2008 (VB 9.0) @keet: 那么lambda-expressions 已经被支持了。它对我有用,我已经测试过了。您确定在... ForEach(Sub ... 处收到编译器错误吗?但是,作为一种解决方法,您也可以使用Dim listOfForms=formsToClose.ToList()。然后使用一个简单的For-loop。

以上是关于仅遍历打开的表单并关闭特定的表单的主要内容,如果未能解决你的问题,请参考以下文章

Django,遍历所有表单错误

循环遍历表单上所有未绑定的控件并清除数据

遍历用户表单中的所有组合框并使用名称进行验证并使它们可见

循环遍历表单,关注必填(但无效)字段

jQuery示例遍历表单数据并显示

使用ajax将它们作为json后如何循环遍历django表单错误