遍历所有控件并清除所需的控件

本文关键字:控件 清除 遍历 | 更新日期: 2023-09-27 18:34:02

您好,我正在尝试在我的 panel1 的控件中找到所需的标签。我所有的标签都命名为"lbl0"、"lbl1"等。

所以我试图遍历所有这些标签,直到找到合适的标签:

Control DelCon(string Name)
    {
        foreach (Control c in panel1.Controls)
            if (c.Name == Name)
            {
               c.Controls.Clear(); // this should delete the control
            }

        return null;
    }

但最后即使c.Name == Name控件也不会被删除。

有人可以帮我解决这个问题吗?

提前谢谢。

遍历所有控件并清除所需的控件

你不需要任何循环。您的面板有一个Controls,其中包含的控件集合。只需传入控件名称即可获取控件:

public Control DelCon(string name)
{
    Control c = panel1.Controls[name];
    panel1.Controls.RemoveByKey(name);//Using RemoveByKey is the best choice
    return c;
}

对上述代码的快速修复

Control DelCon(string Name)
{
    Control toRemove;
    foreach (Control c in panel1.Controls)
    {
         if (c.Name == Name)
         {
            toRemove = c;
            break;
         }
    }
    if(toRemove != null)
        panel1.Controls.Remove(toRemove); 
    return null;
}

原始代码从子控件面板集合中找到的控件中删除所有子控件(如果有)。作为旁注,在循环访问某个集合时,无法从该集合中删除该元素。因此,快速解决方法是复制控件的引用以删除并退出循环,并在退出循环后删除控件(如果找到)

上面的代码可以使用 Linq 缩短

Control toRemove = panel1.Controls.Where(x => x.Name == Name).SingleOrDefault();
if(toRemove != null)
    panel1.Controls.Remove(toRemove);