Форум: "Основная";
Текущий архив: 2002.11.25;
Скачать: [xml.tar.bz2];
ВнизТупой вопрос Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c