2013-10-06 38 views
-1

你好,我试图在我的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控制不会被删除结束。

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

在此先感谢。

回答

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

RemoveByKey为+1 – Steve