mfc listctrl删除选中项的问题

因为如果你要删除多行的话,往往要出错。比如,我现在要删除第0行和第1行(列表的行序列是从0开始的)

 

m_listctrl.DeleteItem(0)
m_listctrl.DeleteItem(1)

这样子是不行的

因为你删除第0行以后,下面的行会往上移,那么原来的第1行就变成了第0行,那么你再 m_listctrl.DeleteItem(1),那么删除的是原来的第2行,真麻烦,

所以,只有从下往上删,才是安全的,先删的,不会影响后面的操作

m_listctrl.DeleteItem(1)
m_listctrl.DeleteItem(0)

删除时用GetFirstSelectedItemPosition/GetNextSelectedItem遍历是不行的,因为删除后POSITION有问题。要倒过来,从后向前删。类似这样:
for (iItem = list.GetItemCount() - 1; iItem >= 0; iItem--)
{
    if (list.GetItemState(iItem, LVIS_SELECTED) == LVIS_SELECTED)
    list.DeleteItem(iItem);

你可能感兴趣的:(mfc)