2013-12-14 66 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集合中删除它。 –

相关问题