Member 12677926 Ответов: 2

Управление перемещением в списке


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

Что я уже пробовал:

LVITEM lvi;

2 Ответов

Рейтинг:
5

Jochen Arndt

Это невозможно сделать без удаления. Вы должны создать копию строки в новом loaction и удалить начальную строку.

Поиск в интернете "clistctrl move item up down" дает вам примеры:
Копирование / перемещение строк в CListCtrl[^]
c++ - перемещение элемента вверх или вниз в списке - переполнение стека[^]

[РЕДАКТИРОВАТЬ]
Чтобы переместить предметы на один шаг можно было бы их обменять:


  • Получить элемент по выбранному индексу и сохранить данные в переменной
  • Получить элемент в новой позиции (индекс + / - 1) и сохранить данные в переменной
  • Установить элемент в выбранную позицию с данными из новой позиции
  • Установить элемент в новую позицию с данными из выбранной позиции
  • Измените выделение на новую позицию

Непроверенный пример:
// Single row must be selected
if (1 != GetSelectedCount())
    return;
int sel = GetNextItem(-1, LVNI_SELECTED); 
// Move up or down
int next = bUp ? sel - 1 : sel + 1;
if (next < 0 || next >= GetItemCount())
    return;
CString strSel, strNext;
for (int i = 0; i < GetHeaderCtrl()->GetItemCount(); i++)
{
    strSel = GetItemText(sel, i);
    strNext = GetItemText(next, i);
    SetItemText(sel, i, strNext);
    SetItemText(next, i, strSel);
}
// Move selection
SetItemState(sel, ~LVNI_SELECTED, LVIS_SELECTED);
SetItemState(next, LVNI_SELECTED, LVIS_SELECTED);
SetSelectionMark(next);
[/РЕДАКТИРОВАТЬ]


Member 12677926

его но НТ

Member 12677926

я сделал это через вектор

Рейтинг:
2

Member 12699051

Привет,
Для предыдущей версии MFC я использовал функции SetSel и SetTopndex.
Показать справку для этой функции.
Есть также много статей о CListCtrl.
С уважением


Member 12677926

не могли бы вы мольбы помочь с логикой