【问题标题】:Disable Windows 10 "scroll inactive windows" in C# Winforms在 C# Winforms 中禁用 Windows 10“滚动非活动窗口”
【发布时间】:2016-04-27 07:08:09
【问题描述】:

我对 Windows 10 中的 C#、Winforms 和“当我将鼠标悬停在非活动窗口上滚动”有疑问。

我有一个流布局面板,我用自定义控件动态填充。 控件具有由鼠标滚轮控制的放大缩小功能。

当控件的数量超过流布局面板大小时,我得到 AutoScroll = true,因此面板得到一个垂直滚动条。我不想用鼠标滚轮滚动面板,我希望用户手动进行。

在 Windows 7 中一切正常,但在 Windows 10 中,如果用户打开了“当我将鼠标悬停在非活动窗口上滚动”时,当鼠标悬停在控件上并且用户使用鼠标滚轮时,控件放大或缩小,但面板也会滚动。

我调试过,我发现 Win10 甚至在窗体/面板的 MouseWheel 事件之前滚动面板。

如何在我的代码中暂时禁用“滚动无效..”?或者至少禁用它的行为?

谢谢!

【问题讨论】:

标签: c# winforms scroll windows-10 mousewheel


【解决方案1】:

我想到禁用该行为的唯一一件事是检查窗口是TopMost 还是失去焦点。 这可以通过使用form.TopMost 属性 ActivatedDeactivate 事件来完成。 使用事件

 public Form1()
    {
        InitializeComponent();
        this.Deactivate += Form1_Deactivate;
        this.Activated += Form1_Activated;
    }

    private void Form1_Activated(object sender, EventArgs e)//The form gained focus
    {
        panel1.Enabled = true;
    }

    private void Form1_Deactivate(object sender, EventArgs e)// The form lost focus
    {
        panel1.Enabled = false;
    }

这些可以正常工作,但使用一些控件会使它们在某些操作系统上改变外观。 如果你不介意,那就太好了。 如果这样做,您应该使用仅在表单失去焦点时禁用滚动本身并在重新获得时启用它的事件来实现相同的概念。

干杯。

【讨论】:

  • 您还可以将激活/停用状态存储在布尔值中(或直接检查它?不应该有某种方法直接检查它吗?)并在滚动事件处理程序中检查它通过立即将其设置为“已处理”来取消事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 2012-12-19
  • 2021-11-12
  • 1970-01-01
  • 2019-05-04
  • 2021-01-26
  • 1970-01-01
相关资源
最近更新 更多