加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

winforms – ScrollBar不会在Select()上滚动

发布时间:2020-12-14 04:00:06 所属栏目:Windows 来源:网络整理
导读:我将焦点放在带有vScrollBar.Select()的滚动条上; 滚动条变得聚焦但不会滚动鼠标滚轮. 仅当鼠标光标位于滚动条上时才会滚动. 如何在Select()之后滚动滚动条而不将光标放在滚动条上? Environment: Windows 10,Windows forms,.NET 4.0 编辑 当我用笔记本电脑
我将焦点放在带有vScrollBar.Select()的滚动条上;
滚动条变得聚焦但不会滚动鼠标滚轮.

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

如何在Select()之后滚动滚动条而不将光标放在滚动条上?

Environment: Windows 10,Windows forms,.NET 4.0

编辑

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

解决方法

我刚刚启动并运行Win10,确认.这是新的Windows 10功能的副作用,在“设置”>中配置.装置>鼠标&触摸板.它被命名为“当我将鼠标悬停在它们上时滚动非活动窗口”,它默认打开. This web page提到它.

这实际上是一个非常好的功能,我个人肯定会保持它,很可能你的用户也会这样.以前的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的行为,最终:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读