【问题标题】:How to Auto Update the CheckState of the parent nodes When Child's Changed Programmingly?如何在 Child 以编程方式更改时自动更新父节点的 CheckState?
【发布时间】:2019-09-23 08:40:18
【问题描述】:

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

我已启用 toAutoTristateTracking 选项。

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

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

PNode^.CheckState := csMixedNormal;

PNode^.CheckState := csCheckedNormal;

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

【问题讨论】:

  • CheckState 是节点字段还是属性?如果您直接更改节点字段的数据,则不会正确通知 Virtual TreeView 所做的更改。这就是为什么各种属性都使用Setter 方法,以便在更改某些数据后执行更新组件可视部分的必要方法。

标签: delphi virtualtreeview


【解决方案1】:

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

这是你应该做的:

VirtualStringTree1.CheckState[PNode] := csCheckedNormal;

【讨论】:

  • 非常感谢。此外,属性名称是 CheckState,而不是 CheckedState。 :)
猜你喜欢
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多