vb.net - 删除 GroupBox 内的控件

标签 vb.net winforms controls 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 内部的一些控件,而不是全部。你能解释一下我的代码中缺少什么以使其工作吗?谢谢。

最佳答案

当您删除 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

关于vb.net - 删除 GroupBox 内的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4263939/

相关文章:

jquery - 从代码隐藏执行与类关联的 jQuery 对话框

c# - 如何动态更改/设置 checkedListBox 项目前颜色

winforms - Ranorex winforms 本地化问题

c# - 重型 WPF 控件如何以一种确定的方式使用一个空闲内存?

.net - 使用 vb.net 对大型 Excel 文件执行 SQL 查询的最佳方法是什么?

asp.net - Asp.net 网站位于服务器上时出错

asp.net - 如何防止 FileUpload 控件在回发时清除?

javascript - 清除输入文本AngularJS

.net - VB.Net 编码指南

.net - 从 Windows 窗体打开 URL