【发布时间】:2025-12-10 01:15:01
【问题描述】:
我在 Winform 用户控件中有一个 ListView。 VirtualMode 为真,VirtualListSize 为 200。当 ListView 中的项目少于可见行时,我在(真实)项目下方得到奇怪的字符。当软件在 Windows 8、10 或 Windows Server 2012 上运行时会出现这些“工件”,但在 Windows 7 上不会出现。
有谁知道是什么导致了这些“人工制品”?我在所有创建 ListViewItems 的地方的 Title 中添加了一个字符“A”“B”等。所以我知道这个用户控件中的任何代码都没有创建它们。我添加了一个示例解决方案,显示了以下问题。 有时它们显示为汉字,有时只是随机的字母和字符组合。通常不超过 4 个字符。
[更新] 在最新版本的 Windows 10 上不会出现。
[Update2] 我能够在一个小样本解决方案上重现该问题。找到压缩文件here。
【问题讨论】:
-
您的 DefaultVirtualListSize 不是一个好主意。避免在 ListView 事件的事件处理程序中分配 VirtualListSize。
-
确实,不分配 VirtualListSize 会删除这些工件。但是有几页空的 ListViewItems 似乎也有点奇怪的用户体验,你不觉得吗?
-
您肯定能想出更好的方法来编写该代码吗?等待事件开始查找文件是没有意义的,无论如何它都会在毫秒后触发。
-
需要记住的几件事:1)这不是我的代码。它是遗留应用程序的一部分。 2)我正在尝试修复这个错误。 3) 文件的显示只是一个例子。实物显示不同的对象,可能有数千个,这就是选择虚拟模式的原因。
-
如果未初始化 VirtualListSize,则不显示任何内容。 Microsoft 在其example¨ 中为 VirtualListSize 分配了更高的值。他们说
VirtualListSize property must be set to the size of the virtual list.@Hans Passant:那你为什么说 DefaultVirtualListSize 不是一个好主意?
标签: c# windows winforms listview virtual