Vb.net 对于每个控件
当我对每个循环使用Vb.net 对于每个控件,vb.net,winforms,button,Vb.net,Winforms,Button,当我对每个循环使用时出现问题: 如果我运行这个循环,我可以看到所有(假设)100个控件 For each Btn as Control in Controls If TypeOf Btn Is Button then If instr(1,Btn.Name,"Test",0) Then Debug.Print(Btn.name) End If Next 但是,如果我需要删除它们,循环似乎混淆了通过控件的循环,它跳过了一些 For each Btn as Contr
时出现问题:
如果我运行这个循环,我可以看到所有(假设)100个控件
For each Btn as Control in Controls
If TypeOf Btn Is Button then
If instr(1,Btn.Name,"Test",0) Then Debug.Print(Btn.name)
End If
Next
但是,如果我需要删除它们,循环似乎混淆了通过控件的循环,它跳过了一些
For each Btn as Control in Controls
If TypeOf Btn Is Button then
If instr(1,Btn.Name,"Test",0) Then Controls.Remove(Btn)
End If
Next
每次移除控件时,我都试图重新启动循环,但解决方案并非如此。。。优雅
是否仍有解决此问题的方法?请尝试:
For i As Integer=控件。计数-1到0步骤-1
如果控件的类型(i)是按钮,并且也是控件(i).Name.StartsWith(“测试”),那么
控件.RemoveAt(i)或控件(i).Dispose()
如果结束
下一个
。。。或
控件中每个c的(按钮的)类型。
其中(函数(x)x.Name.StartsWith(“测试”)).ToList
控制。移除(c)或c.处置()
下一个
。。。或
控件中每个c的(按钮的)类型。
其中(函数(x)x.Name.StartsWith(“测试”)).Reverse()
控制。移除(c)或c.处置()
下一个
。。。在循环对象集合时删除对象。对于Controls.ToList()中的每个Btn as控件,枚举列表时不能从列表中删除项目。您需要创建另一个列表,并在从原始列表中删除时枚举该列表,如@GSerg所示,或者使用For
循环并向后循环,这样删除一个项目不会影响其余项目的索引。此外,如果您只需要按钮
,请执行以下操作:控制按钮的类型().ToList()
。如果您只需要名称以“Test”开头的按钮,请执行以下操作:控制(按钮的)类型().Where(函数(b)b.Name.StartsWith(“Test”)).ToList()
。最后,除非您打算再次使用它们,否则应处理这些按钮。处置控件会自动将其从其父控件中移除,因此只需调用Dispose
。