用鼠标滚轮滚动ListView有时会取消滚动

Mat*_*een 5 c# c++ winapi listview winforms

我在Win32列表视图中遇到了一些麻烦,希望有人能提供一些帮助。当非常快速地滚动(通过滚轮)时,列表视图似乎在滚动,只是跳回到所选项目,因此它在视图中。换句话说,该列表会撤消滚轮滚动,以在列表的顶部/底部显示所选项目。我意识到这听起来非常可疑,因为世界各地的通用控件已被打死。

复制方法如下:

  1. 在报告模式下加载大约500项左右的列表视图(确切的数量无关紧要,您只需要几屏数据)。
  2. 在列表中选择一个项目,并记住您选择的内容。
  3. 用滚轮向下(朝着您)快速滚动列表。我们正在尝试尽快将选定的项目滚动出视线。您可能需要比平时使用更大的力。这不会总是发生。您可能必须尝试几次。
  4. 滚动将正常完成,或者最终会改变主意,然后将您拉回到屏幕上所选项目的视图。

常规和虚拟列表视图都会发生这种情况。我已经在Windows 7 Ultimate上测试了Win32和C#。

我制作了一个小型WinForms应用程序来展示其行为(需要.NET Framework 3.5)。如果您不想运行陌生人的任意可执行文件(我理解),请制作一个新的WinForms应用程序,在报表模式下放置一个listview,添加一个列,然后使用500个递增整数填充表单加载事件中的列表:

private void Form1_Load(object sender, EventArgs e)
{
    for (int i = 0; i < 500; i++)
    {
        this.listView1.Items.Add(i.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)