2014-10-06 72 views
-2

首先。我有動態添加標籤。我想在button_Click之後動態刪除這個標籤,但是我在MainForm上有很多標籤,並且我只想刪除標籤,這些標籤調用labelWorker。 我想是這樣的(例子):c#從表格中動態刪除選定的標籤

List<Control> controlsToRemove = new List<Control>(); 

foreach (Control ctrl in this.Controls) 
{ 
    if (ctrl is Label) 
    { 
     controlsToRemove.Add(ctrl); 
    } 
} 

foreach (Control ctrl in controlsToRemove) 
{ 
    this.Controls.Remove(ctrl); 
} 

但是,這是在winform去除所有標籤。如何刪除:

Label labelWorker = new Label(); 

之前,我會再次創建它們(沒有重複/重疊)。

+0

你缺少標籤的名稱。一旦你分配一個名稱或ID它應該工作 – MethodMan 2014-10-06 22:30:24

+0

我寫了這以下,但我會在這裏再次寫道:當我使用此代碼,只首先創建的標籤正在刪除。 – Kafus 2014-10-06 23:11:45

回答

3

你應該給一個名字到標籤

Label labelWorker = new Label(); 
labelWorker.Name = "labelWorker"; 

然後通過它的名字,你可以方便地訪問和刪除

var labelToRemove = this.Controls["labelWorker"]; 
this.Controls.Remove(labelToRemove); 

Ofcourse,你可以將此不止一個label.Just使確定它們有一些與衆不同的東西(比如名字中的前綴),所以你可以區分它們。

+0

當我使用此代碼時,只有第一個創建的標籤正在移除。 (x => x.Name ==「labelWorker」)) – Kafus 2014-10-06 22:59:43

+0

'foreach(Control in Control.OfType

2

當您創建labelWorker時,給它一個Tag值以標識它們。然後:

if (ctrl is Label && ((Label)ctrl).Tag.ToString() == "somevalue") controlsToRemove.Add(ctrl); 
+0

我想以某種方式添加這段代碼,但是這對於我來說是難以理解的(如果你可以編寫更多的代碼,那將是非常棒的)編輯:好吧,我現在得到它 – Kafus 2014-10-06 23:08:57

+0

這對我有效。只是出於好奇,我有警告:可能意想不到的參考比較;爲了得到一個值比較,把左邊的類型轉換爲'string',這是什麼意思? – Kafus 2014-10-06 23:17:57

+0

@Kafus。標籤屬性是一個對象轉換爲字符串讓它開心 – 2014-10-06 23:50:24