You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Me.Controls遍历窗体控件时无法找到全部ComboBox的问题咨询

问题原因

你在正向遍历Me.Controls控件集合的同时,直接移除集合内的元素,导致遍历的索引发生偏移:
For Each遍历控件集合时会从索引0开始按顺序访问,当你移除索引为N的控件后,集合中所有索引大于N的控件都会自动向前移动一位,原索引N+1的控件会变为新的索引N,此时遍历指针会自动跳转到下一个位置N+1,刚好跳过了刚移动到N位置的控件,就出现了漏删的情况。

修复方案

方案1:倒序遍历控件集合

倒序遍历过程中删除元素不会影响未遍历部分的索引,是最简单的修复方案:

For i As Integer = Me.Controls.Count - 1 To 0 Step -1
    Dim c As Control = Me.Controls(i)
    If c.GetType Is GetType(ComboBox) Then
        Me.Controls.Remove(c)
        c.Dispose()
    End If
Next

方案2:先筛选目标控件再批量删除

先将所有需要删除的ComboBox筛选出来存入独立列表,再遍历列表执行删除操作,避免修改正在遍历的原集合:

' 先把所有ComboBox提取到独立列表,不会随原控件集合变化
Dim delList = Me.Controls.OfType(Of ComboBox)().ToList()
For Each c As ComboBox In delList
    Me.Controls.Remove(c)
    c.Dispose()
Next

内容的提问来源于stack exchange,提问作者SluggerB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:18:04