Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.029 c
15-1142937681
__DATA__
2006-03-21 13:41
2006.04.09
Изменить максимальное число подключений к серверу win2k3


2-1143539680
alk
2006-03-28 13:54
2006.04.09
клиент сервер


2-1143066395
Andy BitOff
2006-03-23 01:26
2006.04.09
Длина массива в байтах.


2-1141851911
spogi
2006-03-09 00:05
2006.04.09
Kak uznat kakoy den nedeli, esli znayu kakaya data?


3-1139978243
Strech
2006-02-15 07:37
2006.04.09
значение полей по умолчанию