Текущий архив: 2006.04.09;
Скачать: CL | DM;
ВнизЗаморочки с TListView.IndexOf Найти похожие ветки
← →
_Mike_ (2006-03-27 06:33) [0]Уважаемые мастера! Не подскажет-ли кто почему при поиске индекса строки в двух абсолютно идентичных ListView мне всегда выдается "-1"?
Имеем: ListView1 и ListView2, ViewStyle=vsReport; в каждом 2-е колонки и одна и та же строка (Петров|зачёт). Пишу так:
P := ListView1.Items.IndexOf(ListView2.Items.Item[I]);
А "P" всегда = -1! Если использовал ListBox-ы, то все работало!
Не пойму, что не так! Поможииите!
← →
balepa © (2006-03-27 07:05) [1]P := ListView1.Items.IndexOf(ListView2.Items[I]);
> Если использовал ListBox-ы, то все работало!
> Не пойму, что не так! Поможииите!
Вреш в листбоксах такой код не работает
← →
ЮЮ © (2006-03-27 08:36) [2]Это же не TStringList, где IndexOf ищет строку,
TListItems.IndexOf
function IndexOf(Value: TListItem): Integer;
Никогда TListItem одного TListView не будет элементом коллекции другого TListView
← →
_Mike_ (2006-03-27 09:05) [3]А как тогда сравнить Item и SubItem (String) одного листа с другим без циклов (типа for I:=0 to ListView.Items.Count -1) ???
← →
MBo © (2006-03-27 09:22) [4]>без циклов (типа for I:=0 to ListView.Items.Count -1) ???
Чудес не бывает, и, даже если бы был встроенный метод для поиска, он бы проходил все элементы в цикле.
P.S. Если список отсортирован, поиск можно делать быстрее.
← →
ЮЮ © (2006-03-27 09:23) [5]Без циклов - никак, ибо цикл - естественный алгоритмический прием для выполнения несколько раз одного и того же действия.
Напиши и отладь функцию поиска в одном TListView.Items по шаблону из TListViewItem один раз, а затем используй её в дальнейшем "без циклов"
← →
_Mike_ (2006-03-27 09:37) [6]Ситуация такая: есть два списка, в каждом по 10 строк, причем половина строки может отличаться от такой же строки в другом списке. типа ("Иванов - пришел") или ("Иванов - ушел").
1) нужно найти одинаковые записи в них и удалить. Затем
2) проанализировать присутствие Иванова на занятиях. (Пришел или Ушел)
и, наконец,
3) проделать то же самое с Петровым, Сидоровым, Васечкиным...
Может лучше использовать для такого дела TStringList? Каким образом лучше это сделать, подскажите, пожалуйста, а то уже перепробовал кучу вариантов - не могу подобрать оптимальный!
← →
_Mike_ (2006-03-27 09:57) [7]И ещё... Не пойму в чем разница если я добавляю из одного ListView1 в другой такими методами...
...
ListView1.Items.Add.Caption := S;
ListView1.Items.Item[ListView1.Items.Count-1].SubItems.Add(ListView2.Items.Item[ListView2.ItemIndex].SubItems.Strings[0]);
ListView1.Items.Item[ListView1.Items.Count-1].SubItems.Add(ListView2.Items.Item[ListView2.ItemIndex].SubItems.Strings[1]);
ListView1.Items.Item[ListView1.Items.Count-1].SubItems.Add("");
ListView1.Items.Item[ListView1.Items.Count-1].ImageIndex := -1;
... или так...
var item:TListItem;
begin
item := ListView1.Items.Add;
item.Caption := S;
item.SubItems.Add(ListView2.Items.Item[ListView2.ItemIndex].SubItems.Strings[0]) ;
item.SubItems.Add(ListView2.Items.Item[ListView2.ItemIndex].SubItems.Strings[1]) ;
item.ImageIndex := -1;
item.Data := nil;
end;
← →
ЮЮ © (2006-03-27 10:00) [8]
> типа ("Иванов - пришел") или ("Иванов - ушел").
откуда тогда Петров|зачёт
> а то уже перепробовал кучу вариантов - не могу подобрать
> оптимальный!
Для 20-ти строк - думать об оптимальности - не обязательно. Дочтаточно правильной функциональности.
← →
ЮЮ © (2006-03-27 10:07) [9]разницы нет никакой
item из 2-го вариата это тот же объект, что и ListView1.Items.Item[ListView1.Items.Count-1] из первого.
Только текст становится удобочитеемым.
Можно ещё упростить:
var
item:TListItem;
subItems: TStrings;
begin
subItems:= ListView2.Items.Item[ListView2.ItemIndex].SubItems;
item := ListView1.Items.Add;
item.Caption := S;
item.SubItems.Add(subItems.Strings[0]) ;
item.SubItems.Add(subItems.Strings[1]) ;
item.ImageIndex := -1;
item.Data := nil;
end;
← →
_Mike_ (2006-03-27 10:15) [10]
> > типа ("Иванов - пришел") или ("Иванов - ушел").
>
>
> откуда тогда Петров|зачёт
Так это уже дальше я ушел! :-)
> > а то уже перепробовал кучу вариантов - не могу подобрать
>
> > оптимальный!
>
>
> Для 20-ти строк - думать об оптимальности - не обязательно.
> Дочтаточно правильной функциональности.
А можно мне пример какой-нибудь поиметь? :-) на black_ghost@mail.ru
Страницы: 1 вся ветка
Текущий архив: 2006.04.09;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.012 c