Member 13089825 Ответов: 1

Кнопки вверх/вниз не отключаются


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

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

onupbuutonclicked(){

 int item2 = m_clist_ctl.GetNextItem(-1, LVNI_SELECTED);
        int columns = m_clist_ctl.GetHeaderCtrl()->GetItemCount();
        //Leaving out the order# column(0)
        for (int i = 1; i < columns; i++)
        {
            CString str1 = m_clist_ctl.GetItemText(item2 + 1, i);
            CString str2 = m_clist_ctl.GetItemText(item2, i);
            m_clist_ctl.SetItemText(item2 + 1, i, str2);
            m_clist_ctl.SetItemText(item2, i, str1);
          
        }
        m_clist_ctl.SetItemState(item2, ~LVNI_SELECTED, LVNI_SELECTED);
        m_clist_ctl.SetItemState(item2 + 1, LVNI_SELECTED, LVNI_SELECTED);

}

OnLvnItemchangedList(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMLISTVIEW pNMLV = reinterpret_cast<lpnmlistview>(pNMHDR);
    // TODO: Add your control notification handler code here
    int count = m_clist_ctl.GetItemCount();
    int row = m_clist_ctl.GetSelectionMark();
    int lastRow = count - 1;
    if ((0 == count) || (row < 0)) {
 GetDlgItem(IDC_BUTTON_UP)->EnableWindow(FALSE);

               }
   else if ((count >= 2) && (row > 0)) {
            GetDlgItem(IDC_BUTTON_UP)->EnableWindow(TRUE);
        }
        else {
            GetDlgItem(IDC_BUTTON_UP)->EnableWindow(FALSE);
        }

   }

не могли бы вы сказать мне, если что-то не так в моем коде

1 Ответов

Рейтинг:
1

Jochen Arndt

Причина в том, что OnLvnItemchangedList не вызывается при изменении выделения. Он вызывается при изменении содержимого путем вызова SetItemText в onupbuutonclicked Но когда это обработано, выбор все еще находится на старом месте, и кнопка не отключена.

Таким образом, вы можете отключить кнопку в конце onupbuutonclicked когда item2 == 1 (но похоже, что ваш опубликованный код предназначен для кнопки вниз, а не для кнопки вверх, потому что вы обмениваетесь item2 и item2+1).

Вы также можете использовать один вызов для включения / выключения кнопки в OnLvnItemchangedList:

// Enable button when current selection is not first row
// No need to check item count because that is always >= 2 when row >= 1
GetDlgItem(IDC_BUTTON_UP)->EnableWindow(row > 0);