Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Тупой вопрос


Страницы:   1 2

Comp ©   (2002-11-14 17:11:00) 

Люди, как , ПРАВИЛЬНО!удалить стороки из Лист Бокса???
Когда удаляю 1-ну строку - то ничего, а когда несколько через оператор Фор, то он прежде чем удалить проп....дит что-то типа List index out of bounds (номер строки), а потом удалит.
Что это значит?


Comp   (2002-11-14 18:57:00) [1]

Всем спасибо за советы, вашу страницу сохраню.
Мне действительно надо выборочно удалять, но теперь ясно одно -
Нумерация оказывается смещается!!!
Теперь ясно.


DieHard   (2002-11-14 18:17:00) [2]

2Игорь Шевченко:
а если с BeginUpdate/EndUpdate? :)


Андрей Прокофьев   (2002-11-14 17:59:00) [3]

2 Игорь Шевченко © (14.11.02 17:47)
Насчет ListBox.Items.Clear никто и не спорит
мы уже не про удаление ВСЕХ строк
:)


Smithson   (2002-11-14 17:52:00) [4]

Вариант.


Skier   (2002-11-14 17:47:00) [5]

>Андрей Прокофьев
Тоже вариант ! :)


Игорь Шевченко   (2002-11-14 17:47:00) [6]

И все эти циклы будут тормозить жутко, так как при каждом удалении будет происходить перерисовка ListBox.

Все, кроме ListBox.Items.Clear.

С уважением,


Андрей Прокофьев   (2002-11-14 17:45:00) [7]

Skier © (14.11.02 17:43)
еще лучше label и goto !!!


Skier   (2002-11-14 17:43:00) [8]

Господа, Repeat... Until- FOREVER ! :)))


Андрей Прокофьев   (2002-11-14 17:39:00) [9]

Smithson © (14.11.02 17:33)
Нет, не согласен
for i := Self.ListBox1.Count - 1 downto 0 do
if Удалить then
Self.ListBox1.Items.Delete(i);


MBo   (2002-11-14 17:37:00) [10]

>Smithson
вот упрямый какой ;)

for i := Items.Count-1 downto 0 do
if (условие) then Items.Delete(i);
это и короче (else нет), и легче читается, и быстрее, т.к. цикл for шустрее while и объем сдвигаемых при удалении данных (кусков массива указателей) суммарно меньше


Андрей Прокофьев   (2002-11-14 17:36:00) [11]

Smithson © (14.11.02 17:33)
Не видел Вашего постинга и теперь согласен :)


Smithson   (2002-11-14 17:33:00) [12]

?


Андрей Прокофьев   (2002-11-14 17:32:00) [13]

2 Smithson © (14.11.02 17:29)
через While не "здоровее" :)


Smithson   (2002-11-14 17:31:00) [14]

А при while все дчень просто

I := 0;
while I < ListBox1.Count do
if Надо удалять then ListBox1.Delete(I)
else Inc(I);


Я не прав?


Smithson   (2002-11-14 17:29:00) [15]

но в этой ситуации еще быстрее будет ListBox1.Clear;
А вот если удаление выборочное (здесь играть, здесь не играть, ...), то через фор геморойно будет


Андрей Прокофьев   (2002-11-14 17:21:00) [16]

Smithson © (14.11.02 17:15)
>>При удалении данных из списков ни в коем случае нельзя >>использовать цикл фор!
?!!
for i := 0 to Self.ListBox1.Count - 1 do
Self.ListBox1.Items.Delete (0);

for i := Self.ListBox1.Count - 1 downto 0 do
Self.ListBox1.Items.Delete (i);




MBo   (2002-11-14 17:18:00) [17]

>Smithson
>ни в коем случае нельзя
Не только можно, но это и быстрее (конечно, при выборочном удалении)


OlegMsc   (2002-11-14 17:17:00) [18]

при удалении индексы смещаются
скорее всего удаляешь строку с УЖЕ не существующим индексом


Андрей Прокофьев   (2002-11-14 17:15:00) [19]

Если все то еще ListBox1.Items.Clear


Smithson   (2002-11-14 17:15:00) [20]

ListBox.Clear - это все
Теперь про итерации. При удаленииданных из списков ни в коем случае нельзяиспользовать цикл фор! Надо так

I := 0;
while I < LixtBox1.Count do ListBox1.Items.Delete(I);

Но еще раз повторю - удалять все быстрее через Clear.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо