![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как бы фильтр в ListBox e [D5, Win95/98]
MisterBin © (2002-05-01 15:15:00)Нужно чтобы если Listbox содержит строки со значением "." и "..", то они оттуда удалялись, а все остальные оставались.
VID (2002-05-01 17:21:00) [1]TO Song: насчёт "писать новый TListBox" - это перебор... достаточно контролировать добавляемую строку, в той процедуре которая этим и занимается.
А если Items заполняются из файла, то после метода LoadFromFile
вызвать процедуру по корректировке списка.
Anatoly Podgoretsky (2002-05-01 16:54:00) [2]Просто противоречие между темой (фильтр) и объяснением (удаление)
Malder (2002-05-01 16:29:00) [3]Мне кажется вы не поняли вопроса. Если опираться на понятия фильтра, то я так себе представляю решение проблемы.
Нужно писать новый TListbox в котором будет событие типа OnAddItems, возникающее при добавлении строки. И в нем нужно проверять: если добавляемая строка "." или ".." то такая строка НЕ добавляется. То есть с помощью items.add и items.insert просто невозможно добавить строку с таким значением.
А если просто не добавлять в ListBox такие значения... то это и ежу понятно, как делать:
if (s<>".") and (s<>"..") then Listbox1.Items.Add(s);
Anatoly Podgoretsky (2002-05-01 16:08:00) [4]VID © (01.05.02 15:44)
Конечно возникнет, но кто же так пишет, верная дорога в могилу
Твой первый совет я не видел, но он тоже не хорош
Надо использовать обычный цикл вниз
VID (2002-05-01 15:44:00) [5]TO Anatoly Podgoretsky :
я тоже так думал, но потом одолели сомнения:
пусть дано:
for x := 0 to listbox1.items.count - 1 do
if listbox1.items.strings[x] = "." then listbox1.items.delete (x);
так вот не возникнет ли ошибки ? Ведь изменяется крайний предел цикла в теле самого цикла...
просто предпочёл указать более "безопасный" вариант...
Anatoly Podgoretsky (2002-05-01 15:32:00) [6]Listbox.Items[].Delete
VID (2002-05-01 15:30:00) [7]...
Var SL:TStringList;
X:Integer;
Begin
SL:=TStringList.Create;
For X := 0 to ListBox1.Items.Count - 1 do
IF (POS (".", ListBox1.ITems.Strings [x])=0) and (POS ("..", ListBox1.ITems.Strings [x])=0) then SL.Add (ListBox1.Items.Strings[x]);
ListBox1.Items.Assign (SL);
SL.Free;
end;