我正在将Delphi XE3与Virtual TreeView一起使用。

我已启用toAutoTristateTracking选项。

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

但是,例如,当我通过编程方式执行相同的操作时

PNode^.CheckState := csMixedNormal;


要么

PNode^.CheckState := csCheckedNormal;


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

最佳答案

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

这是您应该做的:

VirtualStringTree1.CheckState[PNode] := csCheckedNormal;

10-05 22:13