Winforms 滚动条在选择()时不滚动

Winforms 滚动条在选择()时不滚动,winforms,.net-4.0,scrollbar,windows-10,Winforms,.net 4.0,Scrollbar,Windows 10,我用vScrollBar将焦点放在滚动条上; 滚动条会聚焦,但不会使用鼠标滚轮滚动 仅当鼠标光标位于滚动条上时,它才会滚动 如何使滚动条在选择后滚动,而不将光标放在滚动条上 环境:Windows 10、Windows窗体、.NET 4.0 编辑 我注意到,当我用两个手指在笔记本电脑触摸板上滚动时,滚动条可以正常滚动,但用鼠标滚轮却不能。 问题是否可能是由于Windows 10鼠标/触摸板驱动程序造成的?要使用鼠标滚轮使用Winforms滚动条,请不要选择滚动条本身,您必须选择面板、图像或使其可滚

我用vScrollBar将焦点放在滚动条上; 滚动条会聚焦,但不会使用鼠标滚轮滚动

仅当鼠标光标位于滚动条上时,它才会滚动

如何使滚动条在选择后滚动,而不将光标放在滚动条上

环境:Windows 10、Windows窗体、.NET 4.0

编辑

我注意到,当我用两个手指在笔记本电脑触摸板上滚动时,滚动条可以正常滚动,但用鼠标滚轮却不能。
问题是否可能是由于Windows 10鼠标/触摸板驱动程序造成的?

要使用鼠标滚轮使用Winforms滚动条,请不要选择滚动条本身,您必须选择面板、图像或使其可滚动的任何内容。

我刚刚启动并运行Win10,已确认。这是在设置>设备>鼠标和触摸板中配置的新Windows 10功能的副作用。当我将鼠标悬停在非活动窗口上时,它被命名为“滚动非活动窗口”,默认情况下它处于打开状态。提到它

这实际上是一个非常好的功能,我个人肯定会继续使用它,而且很可能你的用户也会这么做。以前的Windows版本将鼠标滚轮消息发送到具有焦点的控件,这让很多习惯了鼠标在浏览器中的行为的用户感到困惑。请注意,滚动条会有所帮助,当您将鼠标移出滚动条时,滚动条会重新绘制拇指,以指示它不再处于活动状态

如果技术上可行,您必须将消息重定向回滚动条。没有什么特别漂亮的:

    public Form1() {
        InitializeComponent();
        panel1.MouseWheel += RedirectMouseWheel;
    }

    private bool redirectingWheel;

    private void RedirectMouseWheel(object sender, MouseEventArgs e) {
        if (this.ActiveControl != sender && !redirectingWheel) {
            redirectingWheel = true;
            SendMessage(this.ActiveControl.Handle, 0x020A, 
                new IntPtr(e.Delta << 16), IntPtr.Zero);
            redirectingWheel = false;
            var hmea = (HandledMouseEventArgs)e;
            hmea.Handled = true;
        }
    }
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

但是现在还不要急,你的用户很容易期待Win10的行为,最终:

不确定你们在新的Windows 10中是否有鼠标问题。我有很多pf问题,做了很多研究,还改变了设置。尝试了所有推荐的方法。所有这些都在Explorer中完成。我改用了Mozilla Firefox,完全没有问题。一切都很完美。可能是你考虑的一个选择。如果您正在使用Firefox,并且遇到了问题,请不要知道。祝你好运

对我来说,这不是一个解决办法。我根据滚动条值重新计算视图。这在Win XP、7、8和8.1中非常有效。使用Spy++,告诉我们哪个窗口获得WM_MOUSEWHEEL消息。@HansPassant当鼠标位于面板上方时,面板接收WM_MOUSEWHEEL消息。当我移动到滚动条上时,它接收WM_鼠标滚轮消息。当我用触摸板在面板上滚动时,滚动条会滚动。我可能会尝试在控制面板上管理鼠标滚轮事件,并简单地将计算值设置为滚动条。真丢脸!微软为什么这么做。开发人员可以自己实现用户体验。我赶上了面板上的鼠标指针,我想滚动,并选择适当的滚动条。它为所有以前的windows版本提供类似的用户体验。我十年前就这么做了,这不是答案