В настоящее время я работаю с TListView на Embarcadero C ++, с объектами, которые могут содержать несколько тысяч элементов.
Я хочу настроить функцию CTRL + A, чтобы все элементы были выбраны одновременно. Мне удалось это сделать, однако при использовании myListView-> SelectAll (); он запускает событие OnSelectItem для каждого элемента (!!!), что может занять огромное количество времени.
Я пробовал BeginUpdate / EndUpdate, Enabled = false без результата вообще — т.е. OnSelectItem запускается для каждого элемента.
Даже если я установлю переменную для немедленного возврата из события OnSelectItem, это займет слишком много времени.
Есть ли простое решение, чтобы избежать тысяч событий, вызываемых при вызове SelectAll ()?
Спасибо за любую помощь.
Меня это не удивит, если это невозможно, но мне интересно, почему на вызовы OnSelectItem требуется так много времени для менее чем 100 000 элементов … возможно, вам просто нужно улучшить производительность управления OnSelectItem, например, просто вернитесь из них, если вы находитесь в середине SelectAll
Добавлено после некоторых комментариев:
да, TListView не предназначен для работы с таким количеством элементов, я не вижу ни одного пользователя, прокручивающего столько строк, в любом случае, кажется, что это будет намного быстрее, если вы сделаете это в другом потоке как они рекомендуют в этой статье Embarcadero
Других решений пока нет …