Ill*_*lia 4 c# controls winforms
如何删除所有Name以“ToClear”开头的标签?
我尝试了这段代码,但点击两次即可清除它们(如果有 26 个标签,每次点击只会删除 13 个)
private void ClearLabel()
{
foreach (var _object in this.Controls)
{
Console.WriteLine(((Label)_object).Name);
if (_object is Label && ((Label)_object).Name.StartsWith("ToClear"))
{
this.Controls.Remove(this.Controls[((Label)_object).Name]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道它不会抛出异常。您正在枚举一个集合,并且在该循环内您正在修改源。相反,您应该收集要删除的控件,然后删除它们。使用 LINQ 简单易读:
var lblRemove = this.Controls.OfType<Label>().Where(l => Name.StartsWith("ToClear")).ToList();
lblRemove.ForEach(this.Controls.Remove);
Run Code Online (Sandbox Code Playgroud)
请注意,它不会找到嵌套控件(就像您的方法一样)。因此,您必须使用递归循环,如下所示: https: //stackoverflow.com/a/65855106/284240