Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как поменять местами элементы в ListView? [D7, WinXP]


Islander ©   (2004-08-21 10:55:00) 

Здравствуйте!

Вроде бы банальный вопрос, но это не работает:

var
 ListItem  : TListItem;
 index     : integer;
begin
 index := lvwData.itemindex;  
 ListItem := LvwData.Items [index - 1];
 LvwData.Items [index - 1] := LvwData.Items [index];
 LvwData.Items [index] := ListItem;


TUser   (2004-08-21 20:45:00) [1]

Предоагаю

  ListView1.Items.Item[0].Selected:=true;
  ListView1.MoveSelection(ListView1);

Первый итем перемещается в конец.


Sandman25   (2004-08-21 15:34:00) [2]

Оптимальнее всего будет написать наследника, который будет использовать protected-члены и добавит пару методов в public.


olookin   (2004-08-21 15:13:00) [3]

[10] Sandman25 ©   (21.08.04 15:01)

Хм. Хоть я тоже вредный, но не уверен, что мой способ оптимальней всего на свете.


Sandman25   (2004-08-21 15:01:00) [4]

Хоть я и вредный, но считаю, что не стоит использовать два куска кода для решения одной задачи, поэтому все-таки твой способ лучше.


olookin   (2004-08-21 14:53:00) [5]

[8] Sandman25 ©   (21.08.04 14:48)

Как ни редка, но я ее использую... Вероятно, тоже из вредности


Sandman25   (2004-08-21 14:48:00) [6]

Все-таки из вредности добавлю, что операция обмена крайне редка. Даже при перетаскивании мышью :)


Sandman25   (2004-08-21 12:57:00) [7]

Согласен.


olookin   (2004-08-21 12:55:00) [8]

to SandMan25

Когда все описанное в ветке про песенку ты делаешь на перетаскивание мышью, то Delete/Insert плохой выход.


olookin   (2004-08-21 12:36:00) [9]

Может быть так?

var
ListItem  : TListItem;
index     : integer;
begin
index := lvwData.itemindex;  
ListItem := TListItem.Create(LvwData.Items);
ListItem.Assign(LvwData.Items [index - 1]);
LvwData.Items [index - 1].Assign( LvwData.Items [index]);
LvwData.Items [index].Assign(ListItem);


Sandman25   (2004-08-21 12:11:00) [10]

Посмотрел исходники. Только через Delete/Insert


Sandman25   (2004-08-21 12:08:00) [11]

Ну, тогда через Delete & Insert. Хотя нужно подумать, странно, что такая простая операция не поддерживается. Может, через сообщение получится.


Islander   (2004-08-21 11:58:00) [12]

Нет там такого :(


Sandman25   (2004-08-21 11:08:00) [13]

ListItem - это ссылка.
Поищите метод Move или Exchange в типе, экземпляром которого является TListView.Items


Наверх

Титульная страница Поиск, карта сайта Написать письмо