ListView删除选中Item一次只能删除一个

睿冰 2012-05-06 09:41:10
我选中ListView中若干个(以3个为例)Item,我想一次删除这些选中的项,代码如下:

for(int i = 0; i < ListView1 -> Items -> Count; ++i)
{
if(ListView1 -> Items -> Item[i] -> Checked)
{
if(MessageDlg("确定要删除选中项?", mtConfirmation, TMsgDlgButtons() << mbOK << mbCancel, 0) == mrOk)
ListView1 -> Items -> Item[i] -> Delete();
}
}

但是每次只能删除一个,删除选中的多个需要点多次才能删除完。看到Delphi中提示用:

for i:=ListView1.Items.Count-1 downto 0 do
if ListView1.Items.Item[i].Selected=True then
begin
ListView1.Items.Delete[i];
end;
//如果不用倒叙,那么删除一个后,Items的Count就发生改变,顺序就会产生越界错误。而倒叙却排除了这个问题。

我试了一下,还是老问题,选中三个,若要删除这三个,需要点3次确定。
...全文
479 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
睿冰 2012-05-07
  • 打赏
  • 举报
回复
已改好,谢谢二位指点:

if(MessageDlg("确定要删除选中项?", mtConfirmation, TMsgDlgButtons() << mbOK << mbCancel, 0) == mrOk)
{
for(int i = ListView1 -> Items -> Count - 1; i >= 0; --i)
{
if(ListView1 -> Items -> Item[i] -> Checked)
ListView1 -> Items -> Item[i] -> Delete();
}
}
CCED136 2012-05-07
  • 打赏
  • 举报
回复
对头, 1楼说的对, 删除确认的对话框,要放到循环外面去,否则,循环一次就会提示一次(如果需要选中的话)。

另外,是否用倒叙,这个无所谓, 反正能遍历所有列表项目即可
dataxdata 2012-05-07
  • 打赏
  • 举报
回复
在队列中,删除操作应该倒序进行,先删除序号大的,再删除序号小的,否则先删除小的,后面的序号就都变了
dfdscx 2012-05-07
  • 打赏
  • 举报
回复
if(MessageDlg("确定要删除选中项?", mtConfirmation, TMsgDlgButtons() << mbOK << mbCancel, 0) == mrOk)
放到for循环外面

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧