Member 13089825 Ответов: 1

Функция Up/down не работает в listcontrol


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

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

int item2 = m_clistctrl.GetNextItem(-1, LVNI_SELECTED);// i think problem is in this line because its always considering selected one is intially selected thing
int columns = m_clistctrl.GetHeaderCtrl()->GetItemCount();

for (int i = 1; i < columns; i++)
{
  CString str1 = m_clistctrl.GetItemText(item2 - 1, i);
  CString str2 = m_clistctrl.GetItemText(item2, i);
  
  m_clistctrl.SetItemText(item2 - 1, i, str2);
  m_clistctrl.SetItemText(item2, i, str1);
}

для первого щелчка он работает нормально, но если я нажму его снова, он не поднимется, а опустится
не могли бы вы сказать мне что-нибудь неправильное в этом коде

Kornfeld Eliyahu Peter

Вы использовали отладчик, чтобы понять, что такое значения времени выполнения и что на самом деле происходит в вашем коде?

1 Ответов

Рейтинг:
8

Jochen Arndt

Вы также должны изменить выбор, потому что после обмена содержимым нижний элемент все еще выбран.

Добавьте это в конце вашего обработчика:

// Unselect item2 (the lower one)
m_clistctrl.SetItemState(item2, ~LVIS_SELECTED, LVIS_SELECTED);
// Select the upper item
m_clistctrl.SetItemState(item2 - 1, LVIS_SELECTED, LVIS_SELECTED);
// This is only necessary if there are multiple items selected
m_clistctrl.SetSelectionMark(item2 - 1);