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();
}
如何删除某个树节点中的所有子节点?
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();
}