Ошибка рисования TTreeView при деактивации формы

Я обнаружил ошибку, связанную с TTreeView .

  • Возьмите форму, содержащую TTreeView с HideSelection , установленным на True .
  • Сделайте множественный выбор в древовидном представлении и выберите несколько элементов в древовидном представлении.
  • Отобразите другую форму, чтобы ваш Приложение имеет две формы.
  • Установите фокус на древовидном представлении, а затем щелкните в другой форме.

Результат выглядит следующим образом:

enter image description here

Но на самом деле не должно быть никаких выделенных элементов. Интересно, что последний элемент выбран и больше не выделяется, как и все остальные элементы. Похоже, что последний выбранный элемент подвергается особой обработке.

Если вместо этого вы щелкнете в поле редактирования (или действительно в любом другом элементе управления, который принимает фокус), то все элементы будут правильно скрыты. Так что вполне нормально, если фокус будет перенесен на другой элемент управления в форме - проблема, похоже, ограничивается деактивацией формы.

Я обнаружил методом проб и ошибок, что могу исправить это, вызвав Invalidate в древовидной структуре всякий раз, когда форма деактивируется и активируется (необходимо предотвратить зеркальное отображение ошибки). Однако я ищу лучшее понимание того, что это за ошибка и как исправить ее менее инвазивным способом, то есть на уровне древовидного представления, а не на уровне содержащей формы.

Итак, чтобы подвести итог, мои вопросы следующие: :

  1. Что именно вызывает проблему?
  2. Как я могу исправить это без написания кода, который перехватывает события TForm ?

Отправил проблему как QC # 94908 .

7
задан David Heffernan 8 June 2011 в 15:37
поделиться