如何在子节点编程更改时自动更新父节点的 CheckState?

How to Auto Update the CheckState of the parent nodes When Child's Changed Programmingly?

我正在使用 Delphi XE3 和 Virtual TreeView。

我启用了 toAutoTristateTracking 选项。

当我尝试手动更改节点的检查状态时,受影响的节点的检查状态也会更改。

然而,当我以编程方式做同样的事情时,例如

PNode^.CheckState := csMixedNormal;

PNode^.CheckState := csCheckedNormal;

只会更改 PNode 检查状态。受影响的节点不会改变它们的状态。为什么?

不要直接访问节点的CheckState。使用数组 属性 CheckState[Node: PVirtualNode] of TBaseVirtualTree to read/write 检查状态。通过 属性 设置检查状态将应用与复选框相关的功能以及触发适当的事件,如 OnCheckingOnCheckedOnInitNode、...

这是你应该做的:

VirtualStringTree1.CheckState[PNode] := csCheckedNormal;