Разработчики, работающие с Firemonkey в среде Delphi, иногда сталкиваются с трудностями при работе с компонентом TListBox, особенно когда дело доходит до множественного выбора элементов. В этом руководстве мы рассмотрим, как программно определить, какие элементы в TListBox с множественным выбором отмечены как выбранные.
Проблема
Разработчик использует TListBox в приложении Firemonkey, созданном с помощью Delphi 10.2 Tokyo. Установлен режим множественного выбора (MultiSelectStyle), который может быть как Extended, так и Default. Пользователь может выбирать несколько элементов, но сталкивается с проблемой: невозможно программно определить, какие элементы выбраны.
Код, который должен был бы пройти по списку элементов и выполнить действия с выбранными, не компилируется:
for loop := 0 to Listbox1.Count - 1 do
begin
if Listbox1.Selected[loop] then
//Do Something
end;
Ошибка компиляции указывает на то, что класс не имеет свойства по умолчанию:
[dcc32 Error] MainApplication.pas(60): E2149 Class does not have a default property
Разработчик изучил различные свойства и методы TListBox, но не нашел способа определить выбранные элементы.
Решение
В Firemonkey свойство TListBox.Selected является указателем на первый выбранный объект TListBoxItem, а не массивом булевых состояний, как в VCL. Это означает, что примеры из VCL не подходят для использования в FMX.
Исправленный код для итерации по выбранным элементам выглядит следующим образом:
for loop := 0 to ListBox1.Count - 1 do
begin
if ListBox1.ListItems[loop].IsSelected then
//Do Something
end;
Пример кода
Давайте рассмотрим пример кода, который демонстрирует, как получить список выбранных элементов:
procedure TForm1.FormCreate(Sender: TObject);
var
ListItem: TListBoxItem;
begin
ListBox1.MultiSelect := True; // Включаем множественный выбор
end;
procedure TForm1.Button1Click(Sender: TObject);
var
loop: Integer;
begin
// Итерация по всем элементам списка
for loop := 0 to ListBox1.Items.Count - 1 do
begin
ListItem := ListBox1.ListItems[loop];
// Проверяем, выбран ли элемент
if ListItem.IsSelected then
begin
// Выполняем действие с выбранным элементом
ShowMessage('Выбран элемент: ' + ListItem.Caption);
end;
end;
end;
Этот код позволяет получить список выбранных элементов в TListBox и выполнить необходимые действия с каждым из них.
Заключение
При работе с TListBox в Firemonkey важно понимать различия в обработке выбранных элементов по сравнению с VCL. Используя свойство IsSelected объекта TListBoxItem, можно эффективно управлять множественным выбором элементов в списке.
Разработчик в Delphi 10.2 Tokyo столкнулся с проблемой множественного выбора элементов в `TListBox` Firemonkey, и ему нужно программно определить, какие элементы выбраны, что не удавалось из-за отличий в свойствах компонента по сравнению с VCL.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.