Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6398|回复: 11

[已解决]listview中复选框与单击条目被选中的配合使用

[复制链接]
发表于 2013-9-20 10:42 | 显示全部楼层 |阅读模式
本帖最后由 hktkzyz 于 2013-10-23 10:35 编辑

1、当我选中三个条目(用ctrl或shift多选)时(如选择1,2,3条后),我希望再点第2条时(这时系统会去掉1和3的选择状态),1和3的复选框同时被去掉。
2、当我选中三个条目(用ctrl或shift多选)时(如选择1,2,3条后),我希望按ctrl键再点第2条时(这时系统会去掉第2条的选择状态),2的复选框同时被去掉。

QQ截图20130919161927.png QQ截图20130919161942.png

我目前的状态是可以在单击未被选取的item条目时,不管单选还是多选(按ctrl或shitf)条目,相应的复选框都能相应的选中或取消。但单击已被选取的item条目时,相应的复选框就无法随之变化了。因为这时即使原来选中状态的item呈未选中状态,但vba依旧认为这些item是选中状态,而使复选框依然为true。

目前代码是:

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
If Item.Selected = True Then
    For j = 1 To ListView1.ListItems.Count              '这个for循环主要是为了能够实现多选时,复选框也相应选中。
        If ListView1.ListItems(j).Selected = True Then
            ListView1.ListItems(j).Checked = True
        Else
            ListView1.ListItems(j).Checked = False
        End If
    Next
End If
End Sub



最佳答案
2013-9-20 12:18
  1. Private Sub ListView1_Click()
  2.     For j = 1 To ListView1.ListItems.Count
  3.         ListView1.ListItems(j).Checked = ListView1.ListItems(j).Selected
  4.     Next
  5. End Sub
复制代码

listview初体验.zip

51.2 KB, 下载次数: 77

效果.zip

371.65 KB, 下载次数: 87

发表于 2013-9-20 12:09 | 显示全部楼层
你的第1个问题,只有第2次单击才会生效。

回复

使用道具 举报

发表于 2013-9-20 12:18 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub ListView1_Click()
  2.     For j = 1 To ListView1.ListItems.Count
  3.         ListView1.ListItems(j).Checked = ListView1.ListItems(j).Selected
  4.     Next
  5. End Sub
复制代码
回复

使用道具 举报

发表于 2013-9-20 12:19 | 显示全部楼层
  1. Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
  2.     For j = 1 To ListView1.ListItems.Count
  3.         ListView1.ListItems(j).Checked = ListView1.ListItems(j).Selected

  4.     Next
  5.     Item.Checked = True
  6. End Sub
复制代码
回复

使用道具 举报

发表于 2013-9-20 12:20 | 显示全部楼层
可以用上WITH,这样更好。

原有的代码,对于通过SELECTED设置CHECKED,直接通过赋值就成了,不需要判断。
回复

使用道具 举报

发表于 2013-9-20 12:21 | 显示全部楼层
你这里设置都是TRUE到TRUE,如果是TRUE-FALSE就加NOT就成了。
回复

使用道具 举报

发表于 2013-9-20 12:21 | 显示全部楼层
  1. Private Sub ListView1_ItemCheck(ByVal Item As MSComctlLib.ListItem)
  2.     Item.Selected = Item.Checked
  3. End Sub
复制代码
回复

使用道具 举报

发表于 2013-9-20 12:22 | 显示全部楼层
代码你还可以全体都给改下,能用WITH的地方全用上WITH,效率会更好,而且可读性高。
回复

使用道具 举报

发表于 2013-9-20 12:24 | 显示全部楼层
listview初体验.rar (42.43 KB, 下载次数: 124)
回复

使用道具 举报

发表于 2013-9-20 15:53 | 显示全部楼层
没必要那么复杂吧,直接点击Checkbox选择就可以啦。
Listview.rar (27.32 KB, 下载次数: 117)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 20:16 , Processed in 0.671374 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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