| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > TListView |
| Автор: Unregistered 1.6.2004, 07:51 |
| Привет. Возникла такая проблема: Использую компонент TListView с Checkboxes=true. Теперь нужно отследить момент, когда пользователь "чекнул итем". Как это сделать? Посмотрел по событиям компонента и ничего подходящего не нашел. Спасибо. |
| Автор: shilnik 1.6.2004, 07:55 |
| А как же onClick? |
| Автор: Unregistered 1.6.2004, 09:21 |
| Никак. На OnClick не отследишь это состояние итема. Ну в общем-то решение я нашел, не знаю на сколько хорошее: procedure TfrmMain.ListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange); begin if (Change=ctState) then begin if Item.Checked then .................. if not Item.Checked then ..................... end; |
| Автор: Girder 1.6.2004, 11:32 | ||||||||
Нормальное решение.
Да нет, можно. Для общего развития: Смотри:
Если у тебя два миллиона записей, с Checkboxes. Тогда можно вот так:
|
| Автор: Unregistered 2.6.2004, 08:34 |
| Ну, это ж просто проверка идет на checked. Я может криво выразился... Если использовать онклик, то не будет реакции на пробел. Чекнуть-то и пробелом можно. Ну даже если это и опустить, то в первом варианте не узнаешь какой итем отмечен в данный момент, соответственно именно с ним не сопоставишь конкретные действия (они выполняться для всех чекнутых). Второй вариант тоже не подходит. С итемами связаны разные объекты образованные от разных классов. В момент когда юзер отмечает итем нужно произвести конкретные действия зависящие от связанного с итемом объекта. При простом клике на итеме ничего происходить не должно (не важно отмечен он или нет) в твоем коде это не прокатывает. Кроме того, нужно обработать и переход в состояние not Checked. Тут вообще ерунда получиться. В общем не состояние, а переход в состояние нужно отслеживать. |
| Автор: Girder 2.6.2004, 09:30 |
| Согласен, я просто показал, что по извращавшись это в принципе реально сделать Забыл совсем: В Item.SubItems добавь запись о состоянии, к примеру: -Item.SubItems.Add('1')-Если выбран -Item.SubItems.Add('2')-Если не выбран а потом их изменяй при изменении состоянии Тогда проверяя Item.Checked и Item.SubItems.Strings[X] ты можеш точно сказать изменилось или нет состояние. Удачи. |
| Автор: <Spawn> 2.6.2004, 16:21 |
| А можно не париться и использовать предназначеное для этого событие OnClickCheck |
| Автор: <Spawn> 2.6.2004, 18:26 |
| Ой сори, не посмотрел про какой компонент идет речь - событие OnClickCheck есть у TCheckListBox, а не у TListView |
| Автор: Unregistered 3.6.2004, 01:01 |
| Ну вариант с Change работает, на нем и остановлюсь наверное. Спасибо всем. |