2013-10-06 60 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