2012-08-22 85 views
0

我有一个CListBox,并且我想要一个上移/下移按钮,它们将当前选定的项目向上或向下移动。在列表框中向上或向下移动项目

现在我认为唯一的解决方案是删除该项目,然后将其插入新的位置。

有没有更有效的方法来做到这一点?

+0

有什么东西[这里](http://www.daniweb.com/software-development/cpp/threads/83187/how-to-move-a-selected-item-updown-in-list-盒)可能有帮助 – Default

回答

3

这是我10年前制作的片段。它使用删除和添加切换位置,但我认为这是唯一的方法。

void CKnoepfeDlg::OnDown() 
{ 
    int item = m_list.GetNextItem(-1,LVNI_SELECTED); 
    if(item == -1) 
     return; 

    if(item < m_list.GetItemCount() - 1) 
    { 
     CString name,befehl; 
     name = m_list.GetItemText(item,0); 
     befehl = m_list.GetItemText(item,1); 
     m_list.DeleteItem(item); 
     m_list.InsertItem(item + 1,name); 
     m_list.SetItemText(item + 1,1,befehl); 
     m_list.SetItemState(item + 1,LVNI_SELECTED,LVIS_SELECTED); 
    } 
} 
+0

上面的代码是用于CListCtrl,但不适用于CListBox! – james

0

以下代码适用于上移。

void CStreamTable::OnBnClickedMoveUp() 
    { 
     int item = m_InputStreamListControl.GetNextItem(-1, LVNI_SELECTED); 
     if (item == -1) 
     return; 

     if (item > 0) 
     { 
      CString name, befehl; 
      name = m_InputStreamListControl.GetItemText(item, 0); 
      befehl = m_InputStreamListControl.GetItemText(item, 1); 
      m_InputStreamListControl.DeleteItem(item); 
      m_InputStreamListControl.InsertItem(item - 1, name); 
      m_InputStreamListControl.SetItemText(item - 1, 1, befehl); 
      m_InputStreamListControl.SetItemState(item - 1, LVNI_SELECTED, LVIS_SELECTED); 
     } 
    } 
相关问题