我试图动态删除控件,而不知道父控件。 但是当我调试时,我在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]);
}
我在这里缺少什么? 我在监督明显的事吗? 提前谢谢!
答案 0 :(得分:2)
在访问之前检查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();
答案 1 :(得分:0)
东西是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]);
}
我们不能通过你提供的代码告诉我们。