1

我试图在单击父节点时选择父节点的所有子节点,但是当我为每个节点设置 Selected = true 时,我只会选择最后一个节点。MultiSelect 是真的,我可以用鼠标完成,所以设置应该没问题。

对于测试,我使用以下代码:

TTreeNode *node = Tv->Items->GetFirstNode();
node->Selected = true;
node = node->GetNext();
node->Selected = true;
node = node->GetNext();
node->Selected = true;
node = node->GetNext();
node->Selected = true;

有什么技巧可以完成这项工作吗?

4

1 回答 1

2

切换节点的选择状态时,该TTreeNode::Selected属性不支持多选。在内部,它将调用TreeView_SelectItem()仅选择单个节点的 Win32 API。

对于多选,请改用以下TTreeView::Select()方法:

select 方法选择一个或多个树节点。

话虽如此,您的示例正在尝试(可能)选择 TreeView 中的每个节点,而不仅仅是您声称的父节点的子节点。

尝试这个:

void AddNodeAndChildrenToList(TList *List, TTreeNode *Node)
{
    List->Add(Node);
    TTreeNode *child = Node->getFirstChild();
    while (child)
    {
        AddNodeAndChildrenToList(List, child);
        child = child->getNextSibling();
    }
}

...

TList *nodes = new TList;
try
{
    TTreeNode *parent = ...;
    AddNodeAndChildrenToList(nodes, parent);
    Tv->Select(nodes);
}
__finally
{
    delete nodes;
}
于 2022-02-10T18:19:14.197 回答