遍历所有控件并清除所需的控件
本文关键字:控件 清除 遍历 | 更新日期: 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);