首页 > 解决方案 > 如何在 Child 以编程方式更改时自动更新父节点的 CheckState?

问题描述

我正在使用带有 Virtual TreeView 的 Delphi XE3。

我已启用 toAutoTristateTracking 选项。

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

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

PNode^.CheckState := csMixedNormal;

或者

PNode^.CheckState := csCheckedNormal;

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

标签: delphivirtualtreeview

解决方案


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

这是你应该做的:

VirtualStringTree1.CheckState[PNode] := csCheckedNormal;

推荐阅读