Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сдвиг при удалении элемента ListView

13K
21 января 2006 года
fel[x]
7 / / 13.12.2005
Приветствую.

Подскажите, пожалуйста, почему при выполнении команды
 
Код:
ListView1.Items.Delete(3);

при удалении указанного четвертого элемента не происходит сдвига всего списка?
Как этого добиться?

Вообще говоря, стоит задача переместить элемент компонента ListView при заданном свойстве ViewStyle = vsSmallIcon на заданную позицию, или в упрощенном случае на одну позицию вверх/вниз.

Если есть более простой способ перемещения элемента, чем его удаление, и вставка уже в новый индекс, то приведите, если не трудно, пример. При этом на первый вопрос решение тоже желательно (уж слишком долго мучался).
2.1K
22 января 2006 года
mainigor
151 / / 21.10.2005
Цитата:
Originally posted by fel[x]
Приветствую.

Подскажите, пожалуйста, почему при выполнении команды
 
Код:
ListView1.Items.Delete(3);

при удалении указанного четвертого элемента не происходит сдвига всего списка?
Как этого добиться?


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;

13K
22 января 2006 года
fel[x]
7 / / 13.12.2005
Цитата:
Originally posted by mainigor
ListView1.Update
или
ListView1.RePaint
короче перерисовать


Попробовал в первую очередь. Все это не помогает. Остается элемент без заголовка. Его нельзя выделить.

Цитата:
Originally posted by mainigor
А перемещеть это как ? 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 со сдвигом нижележащих элементов на один пункт вверх, запостите решение.

2.1K
22 января 2006 года
mainigor
151 / / 21.10.2005
Цитата:
Originally posted by fel[x]
Попробовал в первую очередь. Все это не помогает. Остается элемент без заголовка. Его нельзя выделить.

С этим полностью согласен. Стормозил.
Но первая задача — просто удалить элемент — это просто произведение искусства. Наверное это недоработка Дельфина. Десятки страниц Яндекса, сотни вопросов FAQ — и нигде не упомянается этот баг, если это баг.

Любой кто знает, как удалить элемент ListView со сдвигом нижележащих элементов на один пункт вверх, запостите решение.



А мне кажется. что это не баг.
Так было задумано.
Вообще это перемещение на визуальных компонентах иногда работает довольно медленно, как то я проникся деревом (TTreeView) ну и давай его к базе привязывать. Когда оно выросло - я не обрадовался, что его "посадил"...

13K
22 января 2006 года
fel[x]
7 / / 13.12.2005
Цитата:
Originally posted by mainigor
А мне кажется. что это не баг.
Так было задумано.
Вообще это перемещение на визуальных компонентах иногда работает довольно медленно, как то я проникся деревом (TTreeView) ну и давай его к базе привязывать. Когда оно выросло - я не обрадовался, что его "посадил"...



Видимо, долго заполняется. Да есть такая тенденция у здешней флоры.
В общем я тут углубился донельзя, и понял, при пошаговой компиляции ошибка кроется здесь:
1) удаление элемента (ListView.Items.Item[k].Free)
1a) перестроение дерева. Пока все идет гладко.
2) вставка нового элемента (InsertedItem := Items.Insert(3) — например в 4-ю позицию)
3) присвоение элементу заголовка (Items.Item[3].Caption := 'Any Name') — вот тут-то кроется подводный камень.
Вместо обычного присвоения заголовка, происходит зачем-то перемещение нового элемента на старую позицию. С которой я его удалял! А потом уже присваивается заголовок.

339
24 января 2006 года
verybadbug
619 / / 12.09.2005
 
Код:
ListView1.Items.Delete(3);
  ListView1.Arrange(arAlignTop);
13K
24 января 2006 года
fel[x]
7 / / 13.12.2005
Цитата:
Originally posted by verybadbug
 
Код:
ListView1.Items.Delete(3);
  ListView1.Arrange(arAlignTop);



Сработало. Спасибо.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог