C# - 如何防止组合框中的鼠标滚轮滚动?

Pyg*_*gmy 56 c# combobox mousewheel

我有一个组合框,我想阻止用户使用鼠标滚轮滚动项目.

有一个简单的方法吗?

(C#,VS2008)

Jay*_*ggs 105

对ComboBox 使用MouseWheel事件:

void comboBox1_MouseWheel(object sender, MouseEventArgs e) {
    ((HandledMouseEventArgs)e).Handled = true;
}
Run Code Online (Sandbox Code Playgroud)

注意:您必须在代码中创建事件:

comboBox1.MouseWheel += new MouseEventHandler(comboBox1_MouseWheel);
Run Code Online (Sandbox Code Playgroud)

  • 工作完美,谢谢!旁注:如果您想要在ComboBox下拉时仍然应用滚动,只需添加以下行:"ComboBox control =(ComboBox)sender;" 和"if(!control.DroppedDown)"之前的"((HandledMouseEventArgs)e).Handled = true"行. (20认同)
  • 我知道这是旧的,但我喜欢这个版本在形式构造函数中的`InitializeComponent();`之后:`comboBox1.MouseWheel + =(o,e)=>((HandledMouseEventArgs)e).Handled = true;` (6认同)
  • 目前这不适用于Mono.https://bugzilla.xamarin.com/show_bug.cgi?id=25201 (3认同)
  • 只是想注意,这也适用于`NumericUpDown`控件. (2认同)

Jan*_* Go 8

对于 WPF,请PreviewMouseWheel改为处理事件。

考虑一下也是一个好主意ComboBox.IsDropDownOpen,这样如果展开时选择中有很多项目,用户仍然可以使用鼠标滚动ComboBox

另一件事是在整个应用程序中应用相同的行为。

我通常使用以下代码完成上述所有操作:

应用程序.xaml

<Application.Resources>
    <Style TargetType="ComboBox">
        <EventSetter Event="PreviewMouseWheel" Handler="ComboBox_PreviewMouseWheel" />
    </Style>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

应用程序.xaml.cs

private void ComboBox_PreviewMouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
{
    e.Handled = !((System.Windows.Controls.ComboBox)sender).IsDropDownOpen;
}
Run Code Online (Sandbox Code Playgroud)