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

argument out of range Listview(Баг ?)


Просто Проги

Вопрос

Пришла беда от куда не ждали, поигравшись с listbox понял что для больших данных он как то лагает решил перейти на listview и о чудо быстродействие и всё такое, но вот когда я хочу очистить его с помощью

ListView1.Items.Clear;

то получаю данную ошибку,как то можно избежать данной проблемы или нужно переходить на более новую версию сейчас на 10 seatle работаю.

 

 

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

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

  • 0
  • Модераторы
1 час назад, Просто Проги сказал:

Пришла беда от куда не ждали, поигравшись с listbox понял что для больших данных он как то лагает решил перейти на listview и о чудо быстродействие и всё такое, но вот когда я хочу очистить его с помощью


ListView1.Items.Clear;

то получаю данную ошибку,как то можно избежать данной проблемы или нужно переходить на более новую версию сейчас на 10 seatle работаю.

такое давно есть, поэтому в modernLV есть правильный способ удаления

procedure TAppearanceListView.ItemsClearTrue; // ZuBy
begin
  while Items.Count > 0 do
    Items.Delete(0);
end;


 

Ссылка на комментарий
  • 0
  • Модераторы
procedure ClearLV(const aLV: TListView);
begin
 while aLV.Items.Count > 0 do
   aLV.Items.Delete(0);
end;

вызывать так

ClearLV(ListView1);

 

Ссылка на комментарий
  • 0
  • Модераторы
Только что, Просто Проги сказал:

делал наподобие, но av возникает по прежнему:huh:

в каком событии вызывается код?

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

перед началом потока т.е как должно быть я загружаю список заполняю лист после если пользователь нажал кнопку повторно лист очищается и заполняется новыми значениями .

Ссылка на комментарий
  • 2
57 минут назад, Просто Проги сказал:

может я не правильно потоки использую?

точно не правильно.

1. Создавать TNetHTTPClient нужно в execute потока, а не использовать лежащий на форме.

2. Работать с визуальными объектами нельзя из execute, об этом 100500 раз предупреждали.

Посему, правильно с технической точки зрения (упустим пока архитектуру) будет:

1. в execute создать сетевой компонент и выполнить запрос.

2. Распарсить запрос

3. Передать результаты в основной поток и уже в нем работать с ListView.

Полезно для правильного написания вынести код потока в отдельный модуль. Который НИЧЕГО не должен знать о модуле формы. Поток должен иметь событие, через которое он передает результаты своей работы куда надо. Само собой - вызывать это событие нужно в основном потоке, используя средства синхронизации. Форма при создании потока назначает ему обработчик события и выполняет в нем необходимые действия.

Изменено пользователем kami
Ссылка на комментарий
  • 0
  • Модераторы

Плюсанул kami. От себя добавлю (чтоб был :)) пример с анонимным потоком

procedure TFormMain.LoadList;
begin
  try
    // Что-то делаем...

    TThread.Synchronize(nil,
      procedure
      begin
        // Снихронизируемся с основным потоком, меняем состояние компонентов на форме и т.д.
      end);

    // Опять что-то делаем...
  finally
    // Выполняем обязательные операции
  end;
end;



procedure TFormMain.ButtonClick(Sender: TObject);
begin
  // ListView1.Items.Clear;
  // Cоздаём анонимный поток
  TThread.CreateAnonymousThread(LoadList).Start;
end;

 

Ещё в студии есть семплы по работе с потоками.

  • C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\RTL\HttpAsyncDownload
  • C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\RTL\HttpDownload
  • и ещё где-то там лежат...
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...