Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 14.06.2014, 17:23   #1
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию Удаление строк в ListView

Вобщем проблема такая, когда удаляю строки в ListView у меня идет пересчет нумерации строк, так вот, например, выбираю удалить пять строк а оно удаляет четыре строки, пятая строка удаляется только если кликнуть на ListView, если не кликать - строка не добавляется, т.е получается так

1
2
3
5

цифра 4 вылезет только тогда когда кликнуть ListView, что не так?


Код (кидаю на событие OnChange):
Код:
var
  i:integer;
begin

  for i:=0 to Form1.sListView1.Items.Count-1 do
  begin
    Form1.sListView1.Items[i].Caption:=IntToStr(i+1);
  end;

end;
FleXik вне форума
Старый 14.06.2014, 17:26   #2
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

При удалении обратный отсчет используетмя, т.е. с конца

Код:
for i:=Form1.sListView1.Items.Count-1 downto 0 do
ZuBy вне форума
Старый 14.06.2014, 17:30   #3
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

ZuBy, не помогло, это даже не удаление, мне тупо заново надо пронумеровать строки ListView, удаляет нормально но нумериует так как я описал выше
FleXik вне форума
Старый 14.06.2014, 17:32   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

OnChange по большому счету глобальная функция изменений, реагирует на все.
Не стоило это туда вешать...

Я бы написал функцию обновления LV и дергал когда юзер сам что-то меняет там(удалил к примеру). А дергать пересчет каждые 0.3 сек. - бред

Цитата:
но нумериует так как я описал выше
оно отрисовывать не успевает а не нумеровать.

Последний раз редактировалось Человек_Борща; 14.06.2014 в 17:34.
Человек_Борща вне форума
Старый 14.06.2014, 17:36   #5
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Цитата:
оно отрисовывать не успевает а не нумеровать
оно отрисовывает все строки кроме одной...
FleXik вне форума
Старый 14.06.2014, 17:39   #6
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Попробуй по кнтпке просто вызвать, sListView1.invalidate;
Если после это сработает, то тогда переноси код в диугое место! И используй BeginUpdate, EndUpdate!
ZuBy вне форума
Старый 14.06.2014, 17:45   #7
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Кинул код который в посте #1 на событие OnCustomDrawItem , пашет идеально, не лагает и прорисовывает идеально.

Цитата:
И используй BeginUpdate, EndUpdate!
без этого кстати OnCustomDrawItem идеально работает.
FleXik вне форума
Старый 15.06.2014, 06:13   #8
ksvsvk
Пользователь
 
Регистрация: 10.06.2013
Сообщений: 25
По умолчанию

Цитата:
Сообщение от FleXik Посмотреть сообщение
без этого кстати OnCustomDrawItem идеально работает.
BeginUpdate и EndUpdate блокируют перерисовку компонента в процессе перестроения списка. Без них при удалении либо добавлении каждой строки компонент заново перерисовывается, что, при больших списках, требует много времени.

На пяти строках разницу не заметно, а вот при 500...
ksvsvk вне форума
Старый 18.06.2014, 00:50   #9
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Цитата:
На пяти строках разницу не заметно, а вот при 500...
у меня и при 500 строках там все идеально, проблему решил уже как 3 дня назад так что тему можно закрыть, но, если что-то подобное замечу то конечно же добавлю BeginUpdate и EndUpdate.
FleXik вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление строк ListView TotKtoNado БД в Delphi 0 27.07.2011 19:20
удаление дубликатов в ListView fate Общие вопросы Delphi 8 12.05.2011 16:51
Цикл и удаление в ListView program123 Общие вопросы Delphi 0 16.04.2010 16:06
Удаление Items в ListView BioHEX Общие вопросы Delphi 1 04.01.2010 19:43
Удаление записи в ListView Небесный Общие вопросы Delphi 1 14.12.2008 22:22