Builder C++ 删除TreeNode中的所有子节点

Builder C++ Delete all sub node in TreeNode

如何删除某个树节点中的所有子节点?

TTreeNode* ParentNode = TreeView->Selected;
int countNode = ParentNode->Count;
for(int p=0; p<countNode-1; p++)
{
    ParentNode->Item[p]->Delete();
}

此代码无效!

在父节点上调用DeleteChildren

ParentNode->DeleteChildren();

David 给了你正确的答案(使用 TTreeNode::DeleteChildren()),但你也应该明白为什么你的原始代码失败了,这样你以后就不会再犯同样的错误。

您正在从第一个子节点向前循环到最后一个子节点,同时删除每个节点。每次删除子节点时,父节点的 Count 都会递减,但您没有相应地更新 countNode 变量,每个后续子节点的索引都会递减,但您在访问 Item[p].

写这样一个循环的正确方法看起来更像这样:

TTreeNode* ParentNode = TreeView->Selected;
int countNode = ParentNode->Count;
for(int p = 0; p < countNode; ++p)
{
    ParentNode->Item[0]->Delete();
}

或:

TTreeNode* ParentNode = TreeView->Selected;
int countNode = ParentNode->Count;
while (countNode > 0)
{
    ParentNode->Item[0]->Delete();
    --countNode;
}

或:

TTreeNode* ParentNode = TreeView->Selected;
int countNode = ParentNode->Count;
for(int p = countNode-1; p >= 0; --p)
{
    ParentNode->Item[p]->Delete();
}