我正在将Delphi XE3与Virtual TreeView一起使用。
我已启用toAutoTristateTracking选项。
当我尝试手动更改节点的检查状态时,受影响的节点的检查状态也会随之更改。
但是,例如,当我通过编程方式执行相同的操作时
PNode^.CheckState := csMixedNormal;
要么
PNode^.CheckState := csCheckedNormal;
仅PNode检查状态将被更改。受影响的节点将不会更改其状态。为什么?
最佳答案
不要直接访问节点的CheckState
。使用CheckState[Node: PVirtualNode]
的数组属性TBaseVirtualTree
读取/写入检查状态。通过该属性设置检查状态将应用与复选框相关的功能,并触发相应的事件,例如OnChecking
,OnChecked
,OnInitNode
,...
这是您应该做的:
VirtualStringTree1.CheckState[PNode] := csCheckedNormal;