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

调用Dispose仅销毁半数目标控件,该如何解决?

销毁指定前缀Label控件仅删除一半的解决办法

问题场景

尝试用以下代码销毁名称以lblPosition_开头的Label控件:

For Each cntrl As Control In Me.Controls
    If TypeOf cntrl Is Label And cntrl.Name Like "lblPosition_*" Then
        cntrl.Dispose()
    End If
Next

执行后发现仅能销毁目标控件的一半:比如初始有64个目标控件,第一次执行后剩32个,第二次点击执行剩16个,以此类推。但如果只是统计符合条件的控件数量,结果是准确的,只有调用Dispose()后才会出现这种只删除一半的情况。需求是彻底销毁/移除这类控件,用于刷新窗体加载时添加的控件。

解决方案

改用倒序遍历的方式处理,先将目标控件集合转为List,再从后往前遍历销毁:

Dim targets = Me.Controls.OfType(Of Label).ToList()
For i As Integer = targets.Count - 1 To 0 Step -1
    If targets(i).Name Like "lblPosition_*" Then
        targets(i).Dispose()
    End If
Next

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:07:03