禁用组合框上的鼠标滚轮并将其冒泡到父级

时间:2013-01-10 06:53:22

标签: c# winforms

我有一个嵌套的控件布局:

表格(用户表格)> TabControl> UserControl(autoscroll,docked-fill)> GroupBox(停靠顶部)>组合框

一个用户体验问题是,其中一个输入框的焦点大部分时间都是。当输入框是组合框时,组合框改变选择,这是不希望的。滚动UserControl时,我想滚动到保持组合框对焦

我试过

combobox.MouseWheel += (s, e) => combobox.Parent.Focus();

但这似乎在选择更改后发生。另一方面,TextBox工作得很好。有没有办法让组合框在鼠标滚轮上表现得像TextBox一样?

1 个答案:

答案 0 :(得分:1)

几个月前我有这样的场景:我在每个标签中都有功能区标签,按钮,文本框,组合框。我想用鼠标滚轮向下滚动(对于组合框),但是我的鼠标滚轮改变了标签。它没有影响组合框。

然后我创建了自己的类,继承自该Ribbon控件。

public class MyRibbon : Ribbon {

  public bool DisableMouseWheel { get; set; }

  protected override void OnMouseWheel(MouseEventArgs e) {
    if (!this.DisableMouseWheel) {
      base.OnMouseWheel(e);
    }
  }
}

然后我重建我的解决方案。单击解决方案资源管理器中的“显示所有文件”按钮,然后打开表单的设计器文件。文件中有两行引用了Ribbon类型,我用新的MyRibbon类替换了该类型。

然后我订阅了ComboBox的Enter和Left事件,我更改了DisableMouseWheel属性。