![]() |
|
|
#1
|
||||
|
||||
|
Имеем ListBox(cd), нужно проанализировать и удалить оттуда ненужные строки.
Вот код: Код:
var i:integer; begin for i:=1 to cd.Items.Count do begin if cd.Items[i] = 'test1' then cd.Items.Delete(i); if cd.Items[i] = 'test2' then cd.Items.Delete(i); if cd.Items[i] = 'test' then cd.Items.Delete(i); end; end; ![]() |
|
#2
|
|||
|
|||
|
Код:
var i:integer; begin for i:=cd.Items.Count-1 downto 0 do begin if cd.Items[i] = 'test1' then cd.Items.Delete(i); if cd.Items[i] = 'test2' then cd.Items.Delete(i); if cd.Items[i] = 'test' then cd.Items.Delete(i); end; |
|
#3
|
||||
|
||||
|
Всё дело в том, что когда из списка удаляется элемент, то все идущие после него сдвигаются(напр: идёшь от 1 до 5 - удалил 3 элемент и 4 и 5 стали 3 и 4, отсюда все ошибки), поэтому и надо проверять список с конца.
|
|
#4
|
||||
|
||||
|
Цитата:
Код:
for i:=cd.Items.Count-1 downto 0 do begin if cd.Items[i] = 'test1' then cd.Items.Delete(i); end; for i:=cd.Items.Count-1 downto 0 do begin if cd.Items[i] = 'test2' then cd.Items.Delete(i); end; for i:=cd.Items.Count-1 downto 0 do begin if cd.Items[i] = 'test' then cd.Items.Delete(i); end; |
|
#5
|
||||
|
||||
|
А не легче
Код:
for i:=cd.Items.Count-1 downto 0 do if (cd.Items[i] = 'test1') or (cd.Items[i] = 'test2') or (cd.Items[i] = 'test') then cd.Items.Delete(i); |
|
#6
|
||||
|
||||
|
Цитата:
![]() |