使用鼠标滚轮滚动ListView有时会否定滚动

时间:2010-02-04 03:51:04

标签: c# c++ winforms listview winapi

我在使用Win32列表视图时遇到了一些麻烦,我希望有人有一些智慧。当滚动非常快(通过滚轮)时,有时候列表视图会滚动,只会跳回到所选项目以便它在视图中。换句话说,列表撤消您的滚轮滚动,以显示列表顶部/底部的所选项目。我意识到这听起来非常可疑,因为共同的控制已经被全世界殴打致死。

以下是您可以复制的方式:

  1. 在报告模式下加载一个列表视图,大约有500个左右的项目(确切的计数没关系,你只需要几个数据屏幕)。
  2. 选择列表中的项目并记住您选择的内容。
  3. 快速向下滚动列表(朝向您)。我们正试图尽快将所选项目滚出视图。您可能需要使用比通常在方向盘上使用更多的力。这并不总是会发生。您可能需要多次尝试。
  4. 滚动将正常完成,或者它会在最后改变主意并将您拉回到所选项目在屏幕上的视图。
  5. 常规和虚拟列表视图都会发生这种情况。我在Windows 7旗舰版上测试了Win32和C#。

    我制作了展示行为的small WinForms app(需要.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());
        }
    }
    

4 个答案:

答案 0 :(得分:1)

我注意到了这种行为,它似乎内置于列表视图控件中。我看不出任何有用的功能的原因。我在Sysinternals论坛上创建了一个thread。它可能很有用。

答案 1 :(得分:0)

“我意识到这听起来非常可疑,因为共同的控制已经被全世界殴打致死。”

ListView并没有被打死,但它是在生命支持上。使用不同的控件。

答案 2 :(得分:0)

是自定义列表视图(覆盖绘图?) 顺便说一句,我(从我的理解)面对自定义列表框的相同问题,并在这里找到了一些帮助:

http://aviationxchange.net/wikis/winforms/net-color-listbox.aspx(文件末尾)。

希望这可以提供帮助。

答案 3 :(得分:-1)

我遇到了同样的问题,但我想我找到了原因:我使用的工具可让您配置鼠标按钮(X-Mouse Button Control)。通过禁用它,问题像魔术一样消失了。