Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизПроблема с сортировкой ListView Найти похожие ветки
← →
sergundi (2004-04-15 13:04) [0]Есть несколько столбцов в ListView. Добавляю в него ListItem, затем включаю сортировку по второму столбцу (дата) SortType = stBoth. После этого при добавлении следующего ListItem возникает Exception: List index out of bounds(1) в момент присвоения значения ListItem.Caption (при этом возникает onCompare и в вызове ListViewCompare параметр Item2.Subitems[1] еще не создан). Присвоить SortType = stNone не получается: компилятор выдает Incompatible types TSortType и TSubFieldType. Как быть?
← →
Reindeer Moss Eater © (2004-04-15 13:12) [1]После этого при добавлении следующего ListItem
Сразу после создания нового ListItem в нем еще нет Subitems, а OnCompare уже вызывается. А в нем идет обращение к несуществующим subitem"ам.
Делай выводы ...
← →
sergundi (2004-04-15 13:17) [2]Reindeer Moss Eater:
Я это понимаю, но:
1. А как же при добавлении самого первого ListItema?
2. Почему ругается компилятор (см. начало)
3. Как вообще тогда использовать возможность сортировки?
Подскажите, если знаете, я не въеду никак.
← →
Reindeer Moss Eater © (2004-04-15 13:29) [3]1.Фик ли тут въезжать?
У тебя есть обработчик OnCompare?
В нем есть обращение к элементам SubItems по индексу?
Ты можешь проверить, что запрашиваемый индекс меньше чем Item1.SubItems.Count ?
Или надо институт закончить что бы это понять?
2. Про ругательство компилятора.
ListView1.SortType:=ComCtrls.stNone;
← →
sergundi (2004-04-15 13:39) [4]Ты можешь проверить, что запрашиваемый индекс меньше чем Item1.SubItems.Count
Если я это делаю, сортировка происходит некорректно: первый элемент выпадает из сортированного списка. Он будет помещен на нужное место только при следующем добавлении ListItem. Если у тебя есть пример использования сортировки с событием onCompare, кинь плз мне на мыло или сюда.
← →
Reindeer Moss Eater © (2004-04-15 13:42) [5]А как она может произойти корректно, если то, по чему идет сравнение еще в природе не существует?
← →
Reindeer Moss Eater © (2004-04-15 13:44) [6]Если я это делаю, сортировка происходит некорректно: первый элемент выпадает из сортированного списка. Он будет помещен на нужное место только при следующем добавлении ListItem.
И что? Виндовый проводник, например, ведет себя точно так же.
Только он не ждет создания еще одного файла/каталога что бы отсортировать созданный файл/каталог. Он делает пересортировку по "обновить"
← →
sergundi (2004-04-15 13:52) [7]Понятно, пасиба
← →
Тимохов © (2004-04-15 13:56) [8]я делал так - добавляешь, при этом в oncompare обходишь невозможную сортировку по не созданным подъэлементам, потом принудительно все сортируешь.
← →
sergundi (2004-04-15 14:11) [9]Тимохов:
Я сделал по другому: перед добавлением новых элементов делаю ListView.SortType := ComCtrls.stNone, а после добавления снова ListView.SortType := ComCtrls.stBoth. Вроде работает. Непонятно только зачем для stNone (только для этого значения!) имя модуля указывать (на соседней машине работает ListView.SortType := stNone)
← →
Reindeer Moss Eater © (2004-04-15 14:13) [10]Влияет порядок модулей в твоем uses.
У меня никакого имени модуля добавлять не надо.
← →
sergundi (2004-04-15 14:20) [11]да... Это называется "изучайте матчасть". Всё, на сеновал - и учиться, учиться и еще раз учиться :-)
← →
Тимохов © (2004-04-15 14:44) [12]
> Всё, на сеновал - и учиться, учиться и еще раз учиться
> :-)
чему ?
← →
sergundi (2004-04-15 14:50) [13]например, почитать как влияет порядок модулей в uses на работу компилятора со свойствами типов этих модулей
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.063 c