删除名称以特定文本开头的标签

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)

Tim*_*ter 5

我想知道它不会抛出异常。您正在枚举一个集合,并且在该循环内您正在修改源。相反,您应该收集要删除的控件,然后删除它们。使用 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