Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Общие вопросы > [Virtual TreeView] Обновить 3-state checkbox... |
Автор: Marsianin 31.7.2007, 05:44 |
Статью прочитал, да и уже какое-то время плотно ковыряю VT, всё ясно, однако не могу додумать одну вещь. При создании дерева у меня есть дети, у которых родитель имеет triStateCheckBox. Так вот эти дети сами имеют checkbox и при создании имеют различные положения. Когда дерево показывается дети все прочеканы по разному, а вот родитель - нет. Если кликать мышкой, то автоматом всё встаёт на свои места и родитель чекается, как надо. Как, если я программно изменил состояния детей, обновить состояние triCheckBox их родителя? |
Автор: AriX 31.7.2007, 13:03 | ||||
Marsianin,
И также у родителей нужно выставить:
|
Автор: Marsianin 1.8.2007, 05:07 |
Не, ты не понял. Это дело у меня по умолчанию включено и всё делается как надо. Проблема в том, что когда я программно заполняю дерево и сначала делаю родителя (присваивая ему triStateCheckbox), а потом этому родителю создаю детей, у которых обычный checkbox, и дети эти имеют всякие разные значения. Так вот после создания всех этих детей состояние чекбокса родителя - снято, а должно быть серым. Как только тыкаешь в дереве мышкой по одному из детей и меняешь его состояние, то тогда и начинает срабатывать toAutoTristateTracking и родитель меняет своё состояние автоматом. Вообщем как вызвать руками ту процедуру, которая автоматом происходит при чеканьи руками детей... |
Автор: AriX 1.8.2007, 13:47 | ||
Marsianin, вот так работает на ура, только что проверил:
Может быть ты работаешь непосредственно с данными в PVirtualNode? А нужно использовать свойства CheckType и CheckState дерева. Добавлено через 57 секунд Хм, а я и сам написал Node.CheckType ![]() |
Автор: Marsianin 2.8.2007, 01:25 |
Так, понятное дело, работает. Пока сделал именно так, но в первом случае у меня они инициализировались в событии OnInitNode и там я им присваивал Node.CheckState:=csCheckedNormal; В этом случае не обновляется родитель, как я только не пробовал ![]() |
Автор: AriX 2.8.2007, 13:54 |
Marsianin, ну так я и говорю, юзать нужно не PVirtualNode.CheckState, а TVirtualStringTree.CheckState[Node: PVirtualNode]. |