-1

您好,我正在尝试在面板 1 的控件中找到所需的标签。我所有的标签都命名为“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控件没有被删除。

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

提前致谢。

4

2 回答 2

2

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

public Control DelCon(string name)
{
    Control c = panel1.Controls[name];
    panel1.Controls.RemoveByKey(name);//Using RemoveByKey is the best choice
    return c;
}
于 2013-10-06T13:21:20.363 回答
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);
于 2013-10-06T13:16:20.763 回答