Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.25;
Скачать: CL | DM;

Вниз

Тупой вопрос   Найти похожие ветки 

 
Comp ©   (2002-11-14 17:11) [0]

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


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

пиши For i := ListBox1.Count - 1 downto 0 do


 
Smithson ©   (2002-11-14 17:15) [2]

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

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

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


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

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


 
OlegMsc ©   (2002-11-14 17:17) [4]

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


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

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


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

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);





 
Smithson ©   (2002-11-14 17:29) [7]

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


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

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

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


Я не прав?


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

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


 
Smithson ©   (2002-11-14 17:33) [10]

?


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

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


 
MBo ©   (2002-11-14 17:37) [12]

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

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



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

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


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

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


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

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


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

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

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

С уважением,


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

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


 
Smithson ©   (2002-11-14 17:52) [18]

Вариант.


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

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


 
DieHard ©   (2002-11-14 18:17) [20]

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


 
Comp ©   (2002-11-14 18:57) [21]

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



Страницы: 1 вся ветка

Текущий архив: 2002.11.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
1-82865
Aleksandr
2002-11-14 14:58
2002.11.25
Зачем нужен XPManifest или как его правильно использовать?


3-82658
kern
2002-11-06 13:17
2002.11.25
Read about Paradox


8-82880
ACR
2002-08-03 23:45
2002.11.25
Streming Video


3-82640
Colonel Isaev
2002-11-04 14:25
2002.11.25
Глюк в Qreporte?


1-82749
KME
2002-11-15 12:21
2002.11.25
Power Point