繁体   English   中英

从具有不同父级的列表中删除控件

[英]Remove Controls from List with different Parents

我试图动态删除控件,而又不知道其父级。 但是在调试时,我在mscorlib.dll中不断收到“ System.NullReferenceException”。

我的代码:

//Delete Controls
        List<PictureBox> toDelete = severalControlsFromDifferentPanels;
        for (int i = toDelete.Count - 1; i >= 0; --i)
        {
            Control parent = toDelete[i].Parent;
            parent.Controls.Remove(toDelete[i]);
        }

我在这里想念什么? 我正在监督明显的事情吗? 提前致谢!

在访问pictureBox之前,先检查它是否具有父级:

foreach(PictureBox pictureBox in toDelete)
    if (pictureBox.Parent != null)
        pictureBox.Parent.Controls.Remove(pictureBox);

为了使此代码更具可读性,您可以创建扩展方法:

public static void RemoveFromParent(this Control control)
{
    if (control == null)
       throw new ArgumentNullException();

    if (control.Parent == null)
        return;

    control.Parent.Controls.Remove(control);
}

因此,删除控件将如下所示:

foreach(PictureBox pictureBox in toDelete)
    pictureBox.RemoveFromParent();

东西是null ; 尝试访问null对象的属性或方法将引发该异常。

在第一行上放置一个断点,然后逐步执行代码。

 List<PictureBox> toDelete = severalControlsFromDifferetPanels;

 // if severalControlsFromDifferetPanels is null, then toDelete.Count will throw
 for (int i = toDelete.Count - 1; i >= 0; --i)
 {
     // if toDelete[i] is null, then accessing .Parent will throw
     Control parent = toDelete[i].Parent;

     // if parent is null, then .Controls will throw
     parent.Controls.Remove(toDelete[i]);
 }

从您提供的代码中我们只能说出更多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM