C# ListView 虚拟模式(VirtualMode)下的 坑 ?

M$ 的 ListView 总感觉是一个未完成品。

折腾了一天,5个多小时,刚才在stackoverflow 上才找到原因:https://stackoverflow.com/questions/15875525/listviewitem-image-not-being-shown-on-a-virtual-listview

很伤感,时间这样被浪费。

问题是这样的,我的 ListView 想用 virtualMode,所以,我开了一个测试工程来试验 ListView。结果,在大图模式下,原来在正式程序下正常的显示的缩略图,没了。

只有文字。

用尽了各种方法。

最后才根据上面明确,在虚拟模式下,ListViewItem.ImageIndex 有用,而 ListViewItem.ImageKey 是无效的。

然而,若是你在普通模式下用过 ImageKey 才会发现,它是真的好用。

真的很想打人。。。其实有一下下子我也想到去试一下这个,但还是没试,因为毕竟用 Key 会比 Index 方便多了,特别是涉及到 Item 顺序交换更改时。

===2020.12.3=== 补充====

这个坑还在踩。。在虚拟模式下,不得不用 ImageIndex 后,我发现,当你从 Details 切换到 LargeIcon 时,M$ 会把那些 ListViewItem.ImageIndex 都设置为 -1。对,这是我要的效果,然而。。。然而。。骚操作来了,当 RetriveListViewItem 调用过一次,并且你在这里为 第一次请求的 Index 对应的 ImageIndex 设置上一个大图索引后。。当 第二个 RetriveListViewItem 触发后,你会发现,整个 ListViewItem 数组(若原来你保留着它们) 中每一个 ListViewItem.ImageIndex 都变成了 0 !!!! WTF,你没有请求其它的 Index ,你去改他们的 ImageIndex 做什么?留着 -1 不是很幸福吗?

这应该是 M$ 的一个 BUG了。。。如果再继续在下一次 RetriveListViewItem 时修改 那个 Index 对应的  ListViewItem.ImageIndex,你就会发现。。其它没 RetriveListViewItem 过的 ImageIndex 都变成了那个 新的值!!!!

好在,我终于想到了办法来绕过这个M$ 的 “BUG”。

原文地址:https://www.cnblogs.com/pencilstart/p/14058988.html