使用 Enabled = false 防止控件上的鼠标滚轮

Prevent mousewheel on controls with Enabled = false

在带有 .Net 4.5 的 C# 中,禁用的 NumericUpDownComboBox 控件仍然响应鼠标滚轮事件。这似乎是一个错误。

这是 WinForms 中的错误吗? 如果不对控件进行子类化,我该如何防止这种情况发生?

[编辑:复制步骤] 在 Windows 10 上使用 Visual Studio Professional 2012 Update 4,我执行以下操作:

  1. 创建一个新的 WinForms 应用。
  2. 在设计器中打开 Form1。从工具箱中拖入面板。
  3. 将 ComboBox 和 NumericUpDown 拖到面板中。
  4. 使用“属性”面板 -> 数据 -> 项目
  5. 在 ComboBox 上设置 3 个字符串 "A"、"B"、"C"
  6. 拖入一个复选框并将其放在面板下方。将其命名为 "Disabled".
  7. 双击复选框以创建事件处理程序:

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        panel1.Enabled = !checkBox1.Checked;
    }
    
  8. 编译并运行。选中复选框,使 panel1.Enabled 为假,然后将鼠标悬停在 NumericUpDown 上并移动鼠标滚轮。即使禁用了 NumericUpDown,数字也会改变。

在同事的系统上尝试重现此问题后,我们确定问题是由我安装的第三方工具引起的,该工具可以在鼠标指针下滚动 window 而没有 window 需要焦点(la OSX)。