我在使用Win32列表视图时遇到了一些问题,希望有人能提供一些帮助。当快速滚动(通过鼠标滚轮)时,偶尔会出现列表视图似乎正在滚动,但却跳回所选项目,以便它在视野范围内可见。换句话说,列表视图会撤消您的鼠标滚轮滚动操作,以便在列表的顶部/底部显示所选项目。我意识到这听起来非常可疑,因为Common Controls已经被全球广泛使用。
以下是如何复制此问题:
- 以报告模式加载包含约500个项目左右的列表视图(确切的计数并不重要,您只需要拥有几个屏幕的数据即可)。
- 选择列表中的一个项目并记住所选内容。
- 快速向下(靠近您)使用鼠标滚轮滚动列表。我们正在尝试尽可能快地滚动选定的项目,使其移出视野。您可能需要使用比平常更大的力量滚动鼠标滚轮。这种情况并不总是发生,您可能需要尝试几次。
- 滚动将完成正常或在结束时改变主意并将您拉回到所选项目在屏幕上可见的视图中。
这种情况发生在常规和虚拟列表视图中。我已经在Windows 7 Ultimate上测试了Win32和C#。
我制作了一个小型WinForms应用程序来展示这种行为(需要.NET Framework 3.5)。如果您不想运行来自陌生人的任意可执行文件(我理解),可以创建一个新的WinForms应用程序,在其中添加报表模式的列表视图,添加一列,并在表单加载事件中填充列表,使其包含500个递增整数:
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 500; i++)
{
this.listView1.Items.Add(i.ToString());
}
}