Главная страница
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.046 c
6-89443
saperxl
2003-08-29 15:10
2003.10.27
Delphi -> Outlook Express


3-89178
Alina
2003-10-06 14:51
2003.10.27
Проблема с таблицей


14-89534
Layner
2003-10-08 09:54
2003.10.27
реалии


14-89481
Knight
2003-10-06 23:53
2003.10.27
Первая сотня!!!


1-89282
Марат
2003-10-14 13:02
2003.10.27
Screen