BreakPointMAN |
Отправлено: 16.06.2005, 23:33 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
Доброго времени суток всем!.. занялся я Builder-ом и столкнулся с... ......... вообщем, если кто-нить что-нить подскажет, буду весьма признателен!
У компонента TreeView есть такие события, как OnEditing и OnEdited.
Оба они связаны с изменением свойства Text какого-либо узла при его редактировании с клавиатуры.
Первое из них, OnEditing, возникает перед началом редактирования (когда, например, мы выделили какой-то узел и сделали на нем одинарный щелчек мышью),
А второе, OnEdited, после окончания редактирования.
Вот...
Теперь конкретно о проблеме.
Нужно иметь возможность редактировать дерево (т.е. добавлять в него новые узлы, удалять их и т.п) с клавиатуры. Для этого в обработчике события OnKeyDown компонента TreeView проверяются нажатия таких клавиш, как Insert и Delete. При нажатии Insert создается новый узел на текущем уровне, при нажатии Shift+Insert создается новый дочерний узел от выделенного, при нажатии Delete выделенный узел удаляется.
Проблемы начинаются при входе в режим редактирования текста какого-либо узла. Хотелось бы, чтобы комбинации клавиш типа Shift+Delete, Shift+Insert, просто Insert и т.п. работали как в любом другом текстовом поле Windows, т.е. удаляли выделенный текст с помещением его в буфер, вставляли текст из буфера и т.п.
Вместо этого выскакивает обработчик OnKeyDown.
Окей, но ведь есть события OnEditing и OnEdited! Казалось бы — чего проще! Делаем глобальную переменную-флаг, которая запрещает нам ловить и обрабатывать нажатия Insert, Delete и т.п. при входе в режим редактирования (OnEditing) и разрешает после выхода из него (OnEdited).
Только вот одно НО: событие OnEdited возникает только в том случае, если редактируемый текст был действительно изменен! А вот если мы нажали Esc или сбросили режим редактирования выделением другого узла, то события OnEdited не возникает, и соответственно, возможность обработки Insert, Delete обработчиком OnKeyDown оказыается заблокированной (при входе в OnEditing флаг установили на временный запрет обработки в OnKeyDown, а назад после выхода из режима редактирования не вернули... )
Что делать? ............
|
|
xTrim |
Отправлено: 17.06.2005, 05:57 |
|
Машинист паровоза
Группа: Участник
Сообщений: 208
|
У TreeView есть метод IsEditing, проверяй его в OnKeyDown
|
|
BreakPointMAN |
Отправлено: 17.06.2005, 10:26 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
QUOTE (xTrim @ 17/06/2005, 05:57) | У TreeView есть метод IsEditing, проверяй его в OnKeyDown |
Все работает!
Большое спасибо за столь быстрый ответ!
|
|
|