首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ScrollBar不滚动选择()

ScrollBar不滚动选择()
EN

Stack Overflow用户
提问于 2015-07-29 11:13:05
回答 3查看 1.7K关注 0票数 4

我用vScrollBar.Select();把焦点放在滚动条上,滚动条会聚焦,但它不会用鼠标滚动。

只有当鼠标光标在滚动条上时,它才会滚动。

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

环境: Windows 10,Windows,.NET 4.0

编辑

我注意到,当我用两个手指在笔记本电脑触控板上“滚动”时,滚动条滚动是正确的,而不是用鼠标轮。有可能是因为Windows 10的鼠标/触控板驱动程序的问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-30 16:24:14

我刚让Win10启动并运行,确认。这是一个新的Windows 10功能的副作用,配置在设置>设备>鼠标和触摸屏中.它被命名为“当我悬停在它们上面时滚动不活动的窗口”,默认情况下它是打开的。This web page提到了这一点。

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

修复它在技术上是可能的,您必须将消息重定向回滚动条。没有什么特别漂亮的:

代码语言:javascript
运行
复制
    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的行为,最终:)

票数 8
EN

Stack Overflow用户

发布于 2015-07-29 15:21:26

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

票数 0
EN

Stack Overflow用户

发布于 2015-07-31 20:24:00

不确定你们的鼠标在新的Windows 10中有问题。我有很多pf问题和很多研究,并且改变了设置。试过了所有的建议。所有这些都在探索者中。我改用了,一点问题也没有。一切都很完美。可能是你考虑的一个选择。如果您正在使用Firefox,并且有问题,请不要知道。祝好运!

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31698849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档