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

禁用Windows 10“;滚动非活动窗口“;在C#Winforms中,c#,winforms,scroll,windows-10,mousewheel,C#,Winforms,Scroll,Windows 10,Mousewheel,我有一个关于C#、Winforms和Windows10中“悬停在非活动窗口上时滚动它们”的问题 我有一个流布局面板,我用自定义控件动态填充它。 这些控件具有由鼠标滚轮控制的放大缩小功能 当控件的数量超过flow layout panel size时,我得到AutoScroll=true,因此该面板得到一个垂直滚动条。我不想用鼠标滚轮滚动面板,我希望用户手动操作 在Windows 7中一切正常,但在Windows 10中,如果用户启用了“当我将鼠标悬停在非活动窗口上时滚动它们”,当鼠标位于控件上且

我有一个关于C#、Winforms和Windows10中“悬停在非活动窗口上时滚动它们”的问题

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

当控件的数量超过flow layout panel size时,我得到AutoScroll=true,因此该面板得到一个垂直滚动条。我不想用鼠标滚轮滚动面板,我希望用户手动操作

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

我进行了调试,发现Win10甚至在窗体/面板的鼠标滚轮事件之前就滚动面板

如何在代码中临时禁用“滚动不活动…”?或者至少禁用其行为?


谢谢

我想到的唯一禁用该行为的方法是检查窗口是否位于最顶端或失去焦点。 这可以通过使用
表单来完成。最顶层的
属性
激活的
停用的
事件。
使用事件

 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;
    }
这些都可以很好地工作,但使用一些控件会使它们在某些操作系统上改变外观。 如果你不介意的话,太好了。 如果您这样做了,您应该使用相同的概念,使用事件仅在窗体失去焦点时禁用滚动本身,并在窗体恢复焦点时启用滚动


干杯。

我想到的唯一一件事是禁用该行为,即检查窗口是否位于最顶端或失去焦点。 这可以通过使用
表单来完成。最顶层的
属性
激活的
停用的
事件。
使用事件

 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;
    }
这些都可以很好地工作,但使用一些控件会使它们在某些操作系统上改变外观。 如果你不介意的话,太好了。 如果您这样做了,您应该使用相同的概念,使用事件仅在窗体失去焦点时禁用滚动本身,并在窗体恢复焦点时启用滚动


干杯。

您还可以将激活/停用状态存储在布尔值中(或者简单地检查它?是否应该有某种方法直接检查它?),并在滚动事件处理程序中检查它,通过立即将其设置为“已处理”取消事件。您还可以将激活/停用状态存储在布尔值中(或者直接检查它?是否应该有某种方式直接检查它?)并在滚动事件处理程序中检查它,该事件处理程序通过立即将其设置为“已处理”来取消事件。