Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ListView


Александр ©   (2002-08-18 14:31:00) 

Скажите пожалуйста как правильно удалить все выбранные пользователем строки?


lensky   (2002-08-19 09:05:00) [1]

ia by skazal tak

if ListView1.SelCount>0 then
begin
i:=(ListView1.Selected as TListItem).Index;
Listview1.items.BeginUpdate;
while i<ListView1.Items.Count do begin
if ListView1.Items[i].Selected then ListView1.Items[i].Delete
else Inc(i);
end;
Listview1.items.EndUpdate;
end;

moshno viloby eshe ne prodolshat" kogda udaleno itemov stokoshe skoko SelCount, nu da ladno


lensky   (2002-08-19 08:49:00) [2]

hmmm a Selected property ne bistree proverit" v nachale? a to esli list bol"shoi a item naprimer v nachale, to ne obosnovania trata vremeni imho...


cypher   (2002-08-19 00:42:00) [3]

сдаюсь =)


Юрий Зотов   (2002-08-18 19:05:00) [4]

> cypher © (18.08.02 16:51)

Цикл будет крутиться не до 10, а до нуля - вы не обратили внимание на downto. Поэтому ошибки и не возникнет. В восходящем цикле она бы точно возникла - как Вы и сказали.


Александр   (2002-08-18 17:21:00) [5]

Всем свойственно ошибаться.


TTCustomDelphiMaster   (2002-08-18 17:11:00) [6]


> cypher © (18.08.02 16:51)
> хотя я могу и ошибаться...


Точно ошибаешься


cypher   (2002-08-18 16:51:00) [7]

помоему это не прально
например, Count = 10...
Выделяем пять штук... начинаем удалять... выскочит ошибка out of range. так как Count при каждом удалении будет уменьшаться, но цикл будет крутиться до 10.
я предлагаю такой вариант


i:=0;
while i<LV.Items.Count do begin
if LV.Items[i].Selected then LV.Delete(i);
Inc(i);
end;


хотя я могу и ошибаться...


Александр   (2002-08-18 15:54:00) [8]

Спасибо. Я примерно так и делал, только он мне писал ошибку какую-то, что сперва надо закрыть какую-то форму


McSimm   (2002-08-18 15:03:00) [9]

Например так:

for i := LV.Items.Count - 1 downto 0 do
if LV.Items[I].Selected then LV.Items[I].Delete


stany   (2002-08-18 15:02:00) [10]

Грубо говоря так:ListView1.Items.Delete[ListView1.Selected.Index];


Наверх

Титульная страница Поиск, карта сайта Написать письмо