コンボボックスがあり、ユーザーがマウスホイールでアイテムをスクロールできないようにします。
それを行う簡単な方法はありますか?
(C#、VS2008)
ComboBoxに MouseWheel イベントを使用します。
void comboBox1_MouseWheel(object sender, MouseEventArgs e) {
((HandledMouseEventArgs)e).Handled = true;
}
注:コードでイベントを作成する必要があります。
comboBox1.MouseWheel += new MouseEventHandler(comboBox1_MouseWheel);
WPFの場合は、代わりにPreviewMouseWheel
イベントを処理します。
また、ComboBox.IsDropDownOpen
を考慮することをお勧めします。そうすると、ComboBox
が展開されているときに選択範囲に多くのアイテムがある場合、ユーザーはマウススクロールを使用できます。
もう1つは、同じ動作をアプリケーション全体に適用することです。
通常、次のコードを使用して上記のすべてを実行します。
App.xaml
<Application.Resources>
<Style TargetType="ComboBox">
<EventSetter Event="PreviewMouseWheel" Handler="ComboBox_PreviewMouseWheel" />
</Style>
</Application.Resources>
App.xaml.cs
private void ComboBox_PreviewMouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
{
e.Handled = !((System.Windows.Controls.ComboBox)sender).IsDropDownOpen;
}
Monoでも動作する別のソリューションを使用します。
目標は、誤ってスクロールするのを防ぐことです(つまり、マウスホイールを使用しているときにユーザーがcomboBoxを見ていない場合)。ユーザーがcomboBoxの表示部分の外側にスクロールする場合、コンボボックスはスクロールしません。そうでない場合はスクロールします。
私の解決策:
画面の表示部分の外側に読み取り専用のテキストボックスを配置します。 form_loadに次の行を配置しました:hiddenTextbox.left = -100;
Mouse leaveイベントを使用して、マウスがコンボボックスを離れるときにこのテキストボックスにフォーカスを設定します。 comboBox1_MouseLeaveに次の行を配置しました:hiddenTextbox.focus();
MouseWheelイベントの処理:From1.MouseWheel + = Form1_MouseWheel; textBoxHidden.MouseWheel + = Form1_MouseWheel;