Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы с множественным выбором элементов в TListBox в Firemonkey под Delphi 10.2 Tokyo

Delphi , Компоненты и Классы , Списки

Разработчики, работающие с 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Списки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-09 08:35:38/0.0059871673583984/0