从树视图节点中删除子节点时出现空异常
Null exception at removing a child node from a tree view node
我有以下功能可以从树视图控件中删除特定节点
private void PruneTree(TreeNode tn)
{
foreach (TreeNode item in tn.Nodes)
{
PruneTree(item);
}
if (tn.BackColor == Color.LightCoral && tn.Nodes.Count == 0)
{
tn.Remove();
}
}
我在树视图根节点上调用它,但它为 tn.Nodes
处的 tn
抛出 NullReferenceException
。
我不期望 null 项,因为我迭代了一个节点的子节点,当然它们不能为 null。
可能是什么问题,我认为当我从树中删除一些节点时,它会影响功能。
删除项目时,会破坏枚举。
为防止这种情况发生,请按如下相反的顺序循环:
for(int i = tn.Nodes.Count - 1 ; i >= 0 ; i--)
{
TreeNode item = tn.Nodes[i];
//....
}
这确保您首先删除索引较高的项目,因此枚举不会中断。
我有以下功能可以从树视图控件中删除特定节点
private void PruneTree(TreeNode tn)
{
foreach (TreeNode item in tn.Nodes)
{
PruneTree(item);
}
if (tn.BackColor == Color.LightCoral && tn.Nodes.Count == 0)
{
tn.Remove();
}
}
我在树视图根节点上调用它,但它为 tn.Nodes
处的 tn
抛出 NullReferenceException
。
我不期望 null 项,因为我迭代了一个节点的子节点,当然它们不能为 null。
可能是什么问题,我认为当我从树中删除一些节点时,它会影响功能。
删除项目时,会破坏枚举。
为防止这种情况发生,请按如下相反的顺序循环:
for(int i = tn.Nodes.Count - 1 ; i >= 0 ; i--)
{
TreeNode item = tn.Nodes[i];
//....
}
这确保您首先删除索引较高的项目,因此枚举不会中断。