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

时间:2013-10-06 13:13:04

标签: c# .net winforms controls

您好我正试图在我的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控件。

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

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

快速修复上面的代码

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);