c#删除动态创建的对象

时间:2013-06-19 13:55:11

标签: c# winforms

我想删除所有动态创建的对象[在本例中为标签和轨道栏]

foreach (Label Labels in Controls.OfType<Label>())
{
    if (Labels.Tag.ToString() != "non-disposal"){
        Labels.Dispose();
    }
}

我尝试了这个,但是我收到一条错误,说“对象引用没有设置为对象的实例。 “

谢谢,

解决方案:

foreach (Label label in Controls.OfType<Label>()){

if (label.Tag != null && label.Tag.ToString() == "dynamic")
    label.Dispose();

感谢lazyberezovsky

2 个答案:

答案 0 :(得分:4)

向所有动态控件添加一些Tag,例如"dynamic"。然后以这种方式处理它们:

foreach (Label label in Controls.OfType<Label>())
{
    if (label.Tag != null && label.Tag.ToString() == "dynamic")
        label.Dispose();    
}

看起来某个标签没有分配Tag。这就是为什么你试图在ToString()上拨打null时遇到异常。

答案 1 :(得分:1)

您需要将它们从控件集合中删除。

var toDelete = Controls.OfType<Label>()
              .Where(c => (c.Tag ?? "").ToString() != "non-disposal")
              .ToList(); //need a list or array to avoid changing the collection as we remove from it
foreach (var ctrl in toDelete)
{
    Controls.Remove(ctrl);
    ctrl.Dispose();
}
//if this is part of a long method, also clear the list right away
// so the garbage collector can see them
toDelete.Clear();