在网上搜索了下,结果不怎么理想,很多类似的答案:
POSITION pos = pList-> GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0( "No items were selected!\n ");
else
{
while (pos)
{
int nItem = pList-> GetNextSelectedItem(pos);
pList-> DeleteItem(nItem);
}
}但是实际测试这样是不行的,如
第一行文本
第二行文本
第三行文本
第四行文本如果选择1,2,删除后剩下的是
第二行文本
第四行文本那是因为删除第一行后,这时第二行成为了第一行,再准备删除第二行,就删除到原来的第一行。然后我就想了一个,递归实现,从后面删起,就不会受变动影响:
void CMyDlg::OnDelReply()
{
POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
if (pos == NULL)
{
return;
}
DelReplyWithPosition(pos);
}
void CMyDlg::DelReplyWithPosition(POSITION pos)
{
int iItemIndex = m_ListCtrl.GetNextSelectedItem(pos);
if (pos != NULL)
{
DelReplyWithPosition(pos);
m_ListCtrl.DeleteItem(iItemIndex);
}
else
{
m_ListCtrl.DeleteItem(iItemIndex);
}
}

本文介绍了在选择多个列表项后,如何通过递归方法实现从列表尾部开始逐个删除选中项,避免因列表项顺序变化导致的误删问题。
687

被折叠的 条评论
为什么被折叠?



