调用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
相关产品推荐
相关产品推荐

