我有一个CListBox,并且我想要一个上移/下移按钮,它们将当前选定的项目向上或向下移动。在列表框中向上或向下移动项目
现在我认为唯一的解决方案是删除该项目,然后将其插入新的位置。
有没有更有效的方法来做到这一点?
我有一个CListBox,并且我想要一个上移/下移按钮,它们将当前选定的项目向上或向下移动。在列表框中向上或向下移动项目
现在我认为唯一的解决方案是删除该项目,然后将其插入新的位置。
有没有更有效的方法来做到这一点?
这是我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);
}
}
上面的代码是用于CListCtrl,但不适用于CListBox! – james
以下代码适用于上移。
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);
}
}
有什么东西[这里](http://www.daniweb.com/software-development/cpp/threads/83187/how-to-move-a-selected-item-updown-in-list-盒)可能有帮助 – Default