代码之家  ›  专栏  ›  技术社区  ›  ghostdog74

删除GroupBox中的控件

  •  4
  • ghostdog74  · 技术社区  · 13 年前

    我创建了一个groupbox,然后在运行时用按钮填充它。我还创建了一个按钮,比如Button1,循环浏览groupbox并删除那些按钮。这是我的密码 对于按钮1:

    Public Sub removeControls()
        For Each ctrl As Control In GroupBox1.Controls
            GroupBox1.Controls.Remove(ctrl)
            ctrl.Dispose()
        Next 
    End Sub
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        removeControls()
    End Sub
    

    执行时,它只删除GroupBox1中的一些控件,而不是全部。你能解释一下我的代码中缺少什么吗?谢谢。

    2 回复  |  直到 13 年前
        1
  •  5
  •   Cody Gray iPhone Developer    13 年前

    当您删除 For Each 循环,实际上是在修改试图循环通过的集合。 删除集合中的第一个项目时,第二个项目将上移,成为第一个项目。但现在,当达到循环的第二个索引时 第三的 物品已就位。你实际上跳过了删除第二项,只删除了第一项和第三项。在整个循环中如此。

    相反,您需要在 颠倒 在每个索引处排序并移除项。 从末尾开始删除项目,不会影响项目的顺序或位置。

    因此,只需将方法更改为以下内容:

    Public Sub RemoveControls()
        For i As Integer = (GroupBox1.Controls.Count - 1) To 0 Step -1
            Dim ctrl As Control = GroupBox1.Controls(i)
            GroupBox1.Controls.Remove(ctrl)
            ctrl.Dispose()
        Next i
    End Sub
    
        2
  •  2
  •   Adriaan Stander    13 年前

    你正在修改收藏,因为你正在通过它,这不应该做。

    而是用一些像

    For i As Integer = GroupBox1.Controls.Count - 1 To 0 Step -1
        Dim ctrl As Control = GroupBox1.Controls(i)
        GroupBox1.Controls.Remove(ctrl)
        ctrl.Dispose()
    Next