在C#Winforms中禁用Windows 10“滚动非活动窗口”

时间:2016-04-27 07:08:10

标签: c# winforms scroll windows-10 mousewheel

我在Windows 10中有一个关于C#,Winforms和“当我将鼠标悬停在它们上时滚动非活动窗口”的问题。

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

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

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

我调试了,我发现Win10甚至在表单/面板的MouseWheel事件之前滚动了面板。

如何在我的代码中暂时禁用“Scroll inactive ..”?或者至少禁用它的行为?

谢谢!

1 个答案:

答案 0 :(得分:0)

我唯一想要禁用该行为的是检查窗口是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;
    }

这些工作正常但是使用一些控件会使它们在某些操作系统上改变外观。 如果你不介意,那很好。 如果你这样做,你应该使用相同的概念,只有当表格失去焦点时才会禁用滚动本身,并在重新获得时启用它。

干杯。