Перейти к содержанию
Fire Monkey от А до Я
  • 0

Почему для моего стиля TListBoxItem сбрасывается состояние встроенного TCheckBox при прокручивании списка?


Nix0N

Вопрос

ListBox содержит 100 ListBoxItem (созданные в run-time) с кастомным стилем, который содержит TCheckBox и TLabel. Если у первого item'a отметить CheckBox, он выборочно дублируется у остальных item. Пример: отмечаем первый item, отмечаются 20, 30 и т.д. Пробовал перерисовку, перестановку контента и т.д. - не помогает. В чем может быть дело ?

Чистый проект прилагается. RAD Studio XE6 

ChekBox ListBox.zip

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Отвечаю сам на свой же вопрос, может кому пригодится. Путем долгих и изнурительных экспериментов было установлено: после того, как создан и размещен checkbox, его необходимо "прочекать", т.е. в моём случае это

//ставим чек
Item.StylesData['mycheckbox'] := True;
//снимаем чек
Item.StylesData['mycheckbox'] := False;

С чем связано данное поведение не имею понятия, но многим пригодится...

Ссылка на комментарий
  • 0
  • Администраторы

Я поясню. В вашем проекте, вы создали встроенный TCheckBox в стиле, дали ему свое название "mycheckbox". Но когда вы прокручиваете элементы в списке, то стиль выгружается для не видимых элементов и загружается для новых видимых заново. В этом случае TCheckBox теряет свое состояние (стоит галка или нет). Когда вы задаете галку для итема через:

Item.StylesData['mycheckbox'] := True;

то при загрузке стиля итем автоматически восстанавливает значение галки. А для состояния, когда галка снята, итем не сохраняет эту информацию. Поэтому ваше найденное решение заключается в том, что всем итемам нужно через StylesData задать состояние TCheckBox. И это в принципе правильно кроме одного НО: Обратите внимание, что не нужно устанавливать галку и тут же ее сбрасывать. Достаточно сделать это один раз и установить требуемое значение.

 

Подробнее о ситуации выгрузке стиля можно прочитать тут: Почему для моих объектов стиля сбрасываются данные при прокручивании TListBox? - это аналогичная ситуация.

 

P.S. На счет попутного вопроса о том, почему при загрузке нового стиля галка стоит отмеченной отвечу. В TListBox выгружаемые стили скрывающихся итемов при прокручивании не распускаются, а повторно используются для новых итемов.

Изменено пользователем Brovin Yaroslav
Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...