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

Вниз

Помогите удалить пустые строки из ListBox a   Найти похожие ветки 

 
Brutus   (2003-10-16 12:50) [0]

Подскажите, как можно в цикле for удалить из ListBox"а все пустые стоки? Пробовал вот так:
for i:=0 to Listbox1.Items.Count do
if Listbox2.Items[i]="" then
Listbox1.Items.Delete(i);

Но упрямо выскакивает ошибка List out of bounds (92) в то время как у меня всего 72 элемента в листбоксе.


 
Skier ©   (2003-10-16 12:52) [1]

Затверди как строевой устав ! :
for i := Listbox1.Items.Count - 1 downto 0 do


 
panov ©   (2003-10-16 12:52) [2]

for i := Listbox1.Items.Count -1 downto 0 do


 
Brutus   (2003-10-16 13:34) [3]

Спасибо большое!


 
афвуд ©   (2003-10-16 18:22) [4]

Чувство у меня такое, что не получится ничего. Надо

for i:=0 to Listbox1.Items.Count-1 do
if Listbox2.Items[i]="" then
begin
Listbox1.Items.Delete(i);
dec(i);//или i:=i-1;
end;


 
MBo ©   (2003-10-16 18:28) [5]

>афвуд ©
Чувство тебя подвело


 
pasha_golub ©   (2003-10-16 18:32) [6]

При том очень подвело, такую конструкцию даже компилятор не пропустит.


 
WithOut Any ... ©   (2003-10-16 18:44) [7]

panov © (16.10.03 12:52) [2] Дал хорошую (правильную)рекомендацию!
Но мне кажется, что было логичнее установить фильтр при формировании листбокса, чтобы пустые строки в нем не появлялись


 
mOOx_ ©   (2003-10-16 18:58) [8]

Кстати, мемя давно интересовал вопрос: почему
for i:=Listbox1.Items.Count-1 downto 0 do ...
предпочтительнее
for i:=0 to Listbox1.Items.Count-1 do ...
Я постоянно вторым пользуюсь и даволен.


 
Плохиш_   (2003-10-16 19:08) [9]

>mOOx_ © (16.10.03 18:58) [8]

Потому что Listbox1.Items.Count-1 высчисляется один раз и если в цикле удалить item сам понимаешь что получится ;-)


 
mOOx_ ©   (2003-10-16 19:18) [10]

А я думал, что каждый раз вычисляется :(. И правда. Спасибо за просветление :)


 
default ©   (2003-10-16 19:52) [11]


по-любому ListBox1.Items.Count - 1 один раз считается
по приведённым циклам вариант for i := 0 to ListBox1.Items.Count - 1 do;
выглядит более предпочтительным (i типа Byte тут)

// for i := 0 to ListBox1.Items.Count - 1 do;
// inc byte ptr [i]
// dec al
// jnz -$0A

// for i := ListBox1.Items.Count - 1 downto 0 do;
// dec byte ptr [ebx]
// cmp byte ptr [ebx], $ff
// jnz -$07


 
Anatoly Podgoretsky ©   (2003-10-16 20:34) [12]

mOOx_ © (16.10.03 19:18) [10]
Думать не надо, надо читать справку

For purposes of controlling execution of the loop, the expressions initialValue and finalValue are evaluated only once, before the loop begins.



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

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

Наверх




Память: 0.49 MB
Время: 0.02 c
1-89354
TUser
2003-10-16 09:26
2003.10.27
ToolWindow


1-89374
senya
2003-10-15 18:43
2003.10.27
MySQL


14-89555
Zacho
2003-10-08 01:47
2003.10.27
Воздух из мониторов


14-89467
Е-Моё имя
2003-10-07 10:17
2003.10.27
сказ про то, как модератор был предан анафеме


1-89292
debugger
2003-10-13 13:05
2003.10.27
Компиляция с библиотеками