Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Событие Checked в VirtualStringTree


Автор: Hopkroft 17.7.2013, 10:52
Есть virtualstringtree у каждой строки есть CheckBox. 
Как сделать, что-бы изменение состояние CheckBox менялось при нажатии на строку в дереве.
Насколько я понял нужно отлавливать событие OnClick, и вызывать OnChecked.
Или есть другой путь?

Автор: Evgesha 17.7.2013, 22:24
Попробуй событие
FocusChanged

Автор: Hopkroft 18.7.2013, 08:50
Цитата(Evgesha @ 17.7.2013,  22:24)
Попробуй событие
FocusChanged

К сожалению вариант не подходит. Если щёлкаешь, по полю несколько раз, то он изменяет состояние только при первом щелчке, а потом происходит без изменения. Т.к. фокус больше не меняеться.

По ходу дела возник следующий вопрос. Как отменить сворачивание дерева, при щелчке по его корню?

Автор: MetalFan 18.7.2013, 13:57
Цитата(Hopkroft @  17.7.2013,  10:52 Найти цитируемый пост)
Насколько я понял нужно отлавливать событие OnClick, и вызывать OnChecked.

Чем плох вариант?


Цитата(Hopkroft @  18.7.2013,  08:50 Найти цитируемый пост)
Как отменить сворачивание дерева, при щелчке по его корню?

Если не ошибаюсь (по памяти) то, вешаемся на событие OnCollapsing, в нем смотрим, кого там свернуть пытаются, и разрашаем или нет это действие.

Автор: Hopkroft 18.7.2013, 14:47
Цитата

Чем плох вариант?


Да, смысл в том, что обрабатываю следующим образом.
Код


var
targetNode:PVirtualNode ;
. . .

if ( not (targetNode = VirtualStringTreeEx1.FocusedNode)) then
begin
   exit;
end;

VirtualStringTreeEx1.Selected[targetNode]:=true;

if  (VirtualStringTreeEx1.CheckState[targetNode]=csUncheckedNormal) then
begin
   VirtualStringTreeEx1.CheckState[targetNode]:=csCheckedNormal;
end
else
begin
   VirtualStringTreeEx1.CheckState[targetNode]:=csUncheckedNormal;
end;

Но фишка в том, что перестал обрабатываться, обработчик у самого CheckBox. Т.к. он срабатывает дважды.
Т.е. он снимает, и опять ставит галку.

По-поводу сворачивания, установил MiscOptions->toToggleOnDblClick = false. И вроде поборол проблему без обработчика.


Автор: ZBugz 19.7.2013, 05:57
Обрабатывай OnClick и не морочь голову.
Я его и обрабатываю всегда.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)