Как автоматически обновить CheckState родительских узлов, когда ребенок изменяется программно? - PullRequest
1 голос
/ 23 сентября 2019

Я использую Delphi XE3 с Virtual TreeView.

Я включил опцию toAutoTristateTracking.

Когда я пытаюсь изменить состояние проверки узла вручную, тогда контрольное состояние затронутого узла будеттакже изменить.

Однако, когда я делаю то же самое программно, например,

PNode^.CheckState := csMixedNormal;

или

PNode^.CheckState := csCheckedNormal;

Будет изменено только состояние проверки PNode.Затронутые узлы не изменят свои состояния.Почему?

1 Ответ

4 голосов
/ 23 сентября 2019

Не обращайтесь к CheckState узла напрямую.Используйте свойство массива CheckState[Node: PVirtualNode] из TBaseVirtualTree для чтения / записи состояния проверки.Установка состояния проверки через свойство будет применять функциональность, связанную с флажками, а также запускать соответствующие события, такие как OnChecking, OnChecked, OnInitNode, ...

Это то, что вы должны сделать вместо этого:

VirtualStringTree1.CheckState[PNode] := csCheckedNormal;
...