Главная страница
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.017 c
8-89403
Intell
2003-05-02 14:56
2003.10.27
Запись в TMediaPlayer.


1-89373
Aleksandr
2003-10-15 17:54
2003.10.27
Что может вызвать в ActiveX такую ошибку?


8-89411
!ZasranYolidza!
2003-06-26 19:38
2003.10.27
bmp to jpg converting


14-89487
lancelot
2003-10-09 00:14
2003.10.27
Маленькие наши радости :)


7-89621
каркалыга
2003-07-30 14:20
2003.10.27
модем