使用 Enabled = false 防止控件上的鼠标滚轮
Prevent mousewheel on controls with Enabled = false
在带有 .Net 4.5 的 C# 中,禁用的 NumericUpDown
和 ComboBox
控件仍然响应鼠标滚轮事件。这似乎是一个错误。
这是 WinForms 中的错误吗?
如果不对控件进行子类化,我该如何防止这种情况发生?
[编辑:复制步骤]
在 Windows 10 上使用 Visual Studio Professional 2012 Update 4,我执行以下操作:
- 创建一个新的 WinForms 应用。
- 在设计器中打开 Form1。从工具箱中拖入面板。
- 将 ComboBox 和 NumericUpDown 拖到面板中。
- 使用“属性”面板 -> 数据 -> 项目
在 ComboBox 上设置 3 个字符串 "A"、"B"、"C"
- 拖入一个复选框并将其放在面板下方。将其命名为 "Disabled".
双击复选框以创建事件处理程序:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
panel1.Enabled = !checkBox1.Checked;
}
编译并运行。选中复选框,使 panel1.Enabled 为假,然后将鼠标悬停在 NumericUpDown 上并移动鼠标滚轮。即使禁用了 NumericUpDown,数字也会改变。
在同事的系统上尝试重现此问题后,我们确定问题是由我安装的第三方工具引起的,该工具可以在鼠标指针下滚动 window 而没有 window 需要焦点(la OSX)。
在带有 .Net 4.5 的 C# 中,禁用的 NumericUpDown
和 ComboBox
控件仍然响应鼠标滚轮事件。这似乎是一个错误。
这是 WinForms 中的错误吗? 如果不对控件进行子类化,我该如何防止这种情况发生?
[编辑:复制步骤] 在 Windows 10 上使用 Visual Studio Professional 2012 Update 4,我执行以下操作:
- 创建一个新的 WinForms 应用。
- 在设计器中打开 Form1。从工具箱中拖入面板。
- 将 ComboBox 和 NumericUpDown 拖到面板中。
- 使用“属性”面板 -> 数据 -> 项目 在 ComboBox 上设置 3 个字符串 "A"、"B"、"C"
- 拖入一个复选框并将其放在面板下方。将其命名为 "Disabled".
双击复选框以创建事件处理程序:
private void checkBox1_CheckedChanged(object sender, EventArgs e) { panel1.Enabled = !checkBox1.Checked; }
编译并运行。选中复选框,使 panel1.Enabled 为假,然后将鼠标悬停在 NumericUpDown 上并移动鼠标滚轮。即使禁用了 NumericUpDown,数字也会改变。
在同事的系统上尝试重现此问题后,我们确定问题是由我安装的第三方工具引起的,该工具可以在鼠标指针下滚动 window 而没有 window 需要焦点(la OSX)。