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

ala*_*ncc 2 delphi virtualtreeview

我正在使用 Delphi XE3 和 Virtual TreeView。

我已启用 toAutoTristateTracking 选项。

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

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

PNode^.CheckState := csMixedNormal;
Run Code Online (Sandbox Code Playgroud)

或者

PNode^.CheckState := csCheckedNormal;
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*olf 5

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

这是你应该做的:

VirtualStringTree1.CheckState[PNode] := csCheckedNormal;
Run Code Online (Sandbox Code Playgroud)