Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

Заморочки с 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.087 c
8-1130618516
SergProger
2005-10-30 00:41
2006.04.09
Структура gif.


2-1143327111
Farpik
2006-03-26 01:51
2006.04.09
Подскажите как…


2-1143022002
nub
2006-03-22 13:06
2006.04.09
Форматирование кода в Delphi


8-1130620561
MegaGaga
2005-10-30 01:16
2006.04.09
Как использовать функции для рисованмя на Canvas`е на битмапе?


2-1143100184
Bool
2006-03-23 10:49
2006.04.09
FormKeyDown





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский