2013-12-14 63 views
1

當用戶單擊某個按鈕時,我將一個接一個地添加控制面板。 這些控件在面板上依次顯示。當面板已滿時,例如ten, 添加的下一個控件必須替換已添加的第一個控件,但首先我需要刪除第一個控件....問題是所有正在創建的控件都具有相同的引用,例如, 「圖片」,現在當我使用panel1.Controls.Remove(圖片)它沒有指定在第一個位置的控制需要被刪除!添加/刪除具有相同參考名稱的控件

int index = 0; 

if (util.GetSize() != 10) 
{ 
    ms.Controls.Add(musNote); 
} 
else 
{ 
    ms.Controls.Add(musNote); //this to replace first musNote added... but before I need to remove the musNote that in that position already (problem all of the are musNote!! 
    index++; 
    if (index == 10) 
    { 
     index = 0; 
    } 
} 
musNote.ShowNote(); 

以上不是整個代碼,但應該足以解決問題..如果有任何信息。是需要請問我np。提前請求幫助。

+1

我讀了兩遍,不能理解你在用這個'現在當我使用panel1.Controls.Remove(pic)doe s沒有指定需要刪除第一個位置的控件。' –

+0

示例由於寬度的原因,我只能在面板上添加10個音樂註釋。當面板已滿並且用戶添加另一個音樂筆記時,此音樂筆記必須替換第一個音樂筆記。如果所有musicNotes具有相同的參考名稱,我如何才能專門刪除第一個。希望我更清楚。謝謝。 – user2307236

回答

2

如果你只是想刪除的第一個孩子使用 RemoveAt方法

myPanel.Controls.RemoveAt(0); 

不要上面的代碼中使用,它會在Handle泄漏,使用電池作爲@Hans的意見建議

myPanel.Controls[0].Dispose();//This takes care of destroying the window 
+0

這是一個非常討厭的泄漏,從不推薦。使用myPanel.Controls [0] .Dispose()代替。 –

+0

@HansPassant處理,然後刪除也需要或不? –

+2

不,Dispose()也會自動從Controls集合中刪除它。 –

相關問題