Сдвиг при удалении элемента ListView
Подскажите, пожалуйста, почему при выполнении команды
при удалении указанного четвертого элемента не происходит сдвига всего списка?
Как этого добиться?
Вообще говоря, стоит задача переместить элемент компонента ListView при заданном свойстве ViewStyle = vsSmallIcon на заданную позицию, или в упрощенном случае на одну позицию вверх/вниз.
Если есть более простой способ перемещения элемента, чем его удаление, и вставка уже в новый индекс, то приведите, если не трудно, пример. При этом на первый вопрос решение тоже желательно (уж слишком долго мучался).
Приветствую.
Подскажите, пожалуйста, почему при выполнении команды
при удалении указанного четвертого элемента не происходит сдвига всего списка?
Как этого добиться?
ListView1.Update
или
ListView1.RePaint
короче перерисовать
Вообще говоря, стоит задача переместить элемент компонента ListView при заданном свойстве ViewStyle = vsSmallIcon на заданную позицию, или в упрощенном случае на одну позицию вверх/вниз.
Если есть более простой способ перемещения элемента, чем его удаление, и вставка уже в новый индекс, то приведите, если не трудно, пример. При этом на первый вопрос решение тоже желательно (уж слишком долго мучался).
А перемещеть это как ? Drag & Droop ? Или программно ? Программно - это передвинуть его в массиве. В Drag & Drop в общем-то тоже сопровождая, необходимыми событиями&методами
TListViev->Items[1] = "Иванов";
TListViev->Items[2] = "Петров";
TListViev->Items[3] = "Сидоров";
Меняем Сидорова с Петровым.
String tmp;
tmp = ListView1->Items->Item[2]->Caption;
ListView1->Items->Item[2]->Caption = ListView1->Items->Item[0]->Caption;
ListView1->Items->Item[0]->Caption = tmp;
ListView1.Update
или
ListView1.RePaint
короче перерисовать
Попробовал в первую очередь. Все это не помогает. Остается элемент без заголовка. Его нельзя выделить.
А перемещеть это как ? Drag & Droop ? Или программно ? Программно - это передвинуть его в массиве. В Drag & Drop в общем-то тоже сопровождая, необходимыми событиями&методами
TListViev->Items[1] = "Иванов";
TListViev->Items[2] = "Петров";
TListViev->Items[3] = "Сидоров";
Меняем Сидорова с Петровым.
String tmp;
tmp = ListView1->Items->Item[2]->Caption;
ListView1->Items->Item[2]->Caption = ListView1->Items->Item[0]->Caption;
ListView1->Items->Item[0]->Caption = tmp;
С этим полностью согласен. Стормозил.
Но первая задача — просто удалить элемент — это просто произведение искусства. Наверное это недоработка Дельфина. Десятки страниц Яндекса, сотни вопросов FAQ — и нигде не упомянается этот баг, если это баг.
Любой кто знает, как удалить элемент ListView со сдвигом нижележащих элементов на один пункт вверх, запостите решение.
Попробовал в первую очередь. Все это не помогает. Остается элемент без заголовка. Его нельзя выделить.
С этим полностью согласен. Стормозил.
Но первая задача — просто удалить элемент — это просто произведение искусства. Наверное это недоработка Дельфина. Десятки страниц Яндекса, сотни вопросов FAQ — и нигде не упомянается этот баг, если это баг.
Любой кто знает, как удалить элемент ListView со сдвигом нижележащих элементов на один пункт вверх, запостите решение.
А мне кажется. что это не баг.
Так было задумано.
Вообще это перемещение на визуальных компонентах иногда работает довольно медленно, как то я проникся деревом (TTreeView) ну и давай его к базе привязывать. Когда оно выросло - я не обрадовался, что его "посадил"...
А мне кажется. что это не баг.
Так было задумано.
Вообще это перемещение на визуальных компонентах иногда работает довольно медленно, как то я проникся деревом (TTreeView) ну и давай его к базе привязывать. Когда оно выросло - я не обрадовался, что его "посадил"...
Видимо, долго заполняется. Да есть такая тенденция у здешней флоры.
В общем я тут углубился донельзя, и понял, при пошаговой компиляции ошибка кроется здесь:
1) удаление элемента (ListView.Items.Item[k].Free)
1a) перестроение дерева. Пока все идет гладко.
2) вставка нового элемента (InsertedItem := Items.Insert(3) — например в 4-ю позицию)
3) присвоение элементу заголовка (Items.Item[3].Caption := 'Any Name') — вот тут-то кроется подводный камень.
Вместо обычного присвоения заголовка, происходит зачем-то перемещение нового элемента на старую позицию. С которой я его удалял! А потом уже присваивается заголовок.
ListView1.Arrange(arAlignTop);
ListView1.Arrange(arAlignTop);
Сработало. Спасибо.