VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 607|回复: 9

[已解决]关于MFC中的ListCtrl控件的删除问题

[复制链接]
05_avatar_middle
最佳答案
1 
donate_vip 发表于 2022-4-16 15:18:43 | 显示全部楼层 |阅读模式
我有三行数据,我想删除第0行以及第二行,我调用了DeleteItem函数传入参数为0成功删除了第0行,但是我再次传入参数为2时却无法删除第二行数据 是为什么?我应该怎么做才可以删除到第二行的数据?  希望的大佬们能解答下
最佳答案
17_avatar_small
2022-4-20 14:28:58
知知 发表于 2022-4-16 20:34
那用遍历的方式来删除多个隔行的话这有点难搞啊...

        POSITION pos = m_list.GetFirstSelectedItemPosition(); //获取首选中行位置
        while (pos)
        {
                int nSelected = m_list.GetNextSelectedItem(pos); //获取选中行的索引
                m_list.DeleteItem(nSelected); //根据索引删除
                pos = m_list.GetFirstSelectedItemPosition();
        }




上一篇:为什么一调用DwmExtendFrameIntoClientArea函数就报错,说无法解析?
下一篇:CLR中textBox 与 MFC中Edit Control的区别
27_avatar_middle
最佳答案
0 
在线会员 发表于 2022-4-18 09:39:02 | 显示全部楼层
一行一行删除。用这个代码看看。
CListCtrl *plist=(CListCtrl*)GetDlgItem(IDC_LIST1);
POSITION ps=plist->GetFirstSelectedItemPosition();

int num1=plist->GetNextSelectedItem(ps);
if(num1<0)
{MessageBox(_T("选中一行后删除"));
return;
}
plist->DeleteItem(num1);关于MFC中的ListCtrl控件的删除问题
17_avatar_middle
最佳答案
41 
在线会员 发表于 2022-4-20 14:28:58 | 显示全部楼层    本楼为最佳答案   
bestAnswer
知知 发表于 2022-4-16 20:34
那用遍历的方式来删除多个隔行的话这有点难搞啊...

        POSITION pos = m_list.GetFirstSelectedItemPosition(); //获取首选中行位置
        while (pos)
        {
                int nSelected = m_list.GetNextSelectedItem(pos); //获取选中行的索引
                m_list.DeleteItem(nSelected); //根据索引删除
                pos = m_list.GetFirstSelectedItemPosition();
        }
17_avatar_middle
最佳答案
41 
在线会员 发表于 2022-4-16 19:22:53 | 显示全部楼层
因为原来的三行变成了2行,你再删除索引2的行是不存在的,要删除多个应该从高索引位的往低的删。
05_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2022-4-16 20:34:38 | 显示全部楼层
yoobaby 发表于 2022-4-16 19:22
因为原来的三行变成了2行,你再删除索引2的行是不存在的,要删除多个应该从高索引位的往低的删。

那用遍历的方式来删除多个隔行的话这有点难搞啊...
68_avatar_middle
最佳答案
0 
在线会员 发表于 2022-4-21 09:55:28 | 显示全部楼层
学习学习,很有帮助
05_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2022-4-21 12:49:10 | 显示全部楼层
qq1111 发表于 2022-4-18 09:39
一行一行删除。用这个代码看看。
CListCtrl *plist=(CListCtrl*)GetDlgItem(IDC_LIST1);
POSITION ps=pli ...

感谢大佬!!
05_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2022-4-21 12:50:46 | 显示全部楼层
yoobaby 发表于 2022-4-20 14:28
POSITION pos = m_list.GetFirstSelectedItemPosition(); //获取首选中行位置
        while (pos)
        {

感谢大佬!!
05_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2022-4-21 13:11:20 | 显示全部楼层
qq1111 发表于 2022-4-18 09:39
一行一行删除。用这个代码看看。
CListCtrl *plist=(CListCtrl*)GetDlgItem(IDC_LIST1);
POSITION ps=pli ...

但是这个只能解决单个删除 我想实现的是选中多个然后都可以删除。不过还是谢谢啦!!已经成功实现了
05_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2022-4-21 13:12:24 | 显示全部楼层
xs1 发表于 2022-4-21 09:55
学习学习,很有帮助

嗯嗯,已经实现了
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-9-28 02:32

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表