sube - C#- ¿Cómo evito el desplazamiento de la rueda del mouse en mi combobox?
mi rueda de mouse no funciona (3)
Tengo un cuadro combinado y quiero evitar que el usuario se desplace por los elementos con la rueda del mouse.
¿Hay una manera fácil de hacer eso?
(C #, VS2008)
Para WPF, maneje el evento PreviewMouseWheel
lugar.
También sería una buena idea considerar ComboBox.IsDropDownOpen
para que el usuario pueda seguir utilizando el desplazamiento del mouse si hay muchos elementos en la selección cuando se expande ComboBox
.
Otra cosa es aplicar el mismo comportamiento en toda la aplicación.
Normalmente hago todo lo anterior usando el siguiente código:
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;
}
Use el evento MouseWheel para su ComboBox:
void comboBox1_MouseWheel(object sender, MouseEventArgs e) {
((HandledMouseEventArgs)e).Handled = true;
}
Nota: deberás crear un evento en el código:
comboBox1.MouseWheel += new MouseEventHandler(comboBox1_MouseWheel);
Utilizo otra solución que también funciona en Mono.
El objetivo es evitar el desplazamiento accidental (es decir, cuando el usuario no está mirando el comboBox al usar la rueda del mouse). Si se desplaza fuera de la porción visible de comboBox, el cuadro combinado no debe desplazarse, de lo contrario debería hacerlo.
Mi solución:
Coloque un cuadro de texto de solo lectura fuera de la parte visible de la pantalla. En form_load coloqué la línea: hiddenTextbox.left = -100;
Establezca el foco en este cuadro de texto cuando el mouse sale del cuadro combinado usando el evento mouse leave. En comboBox1_MouseLeave, coloqué la línea: hiddenTextbox.focus ();
Controlar el evento mouseWheel: From1.MouseWheel + = Form1_MouseWheel; textBoxHidden.MouseWheel + = Form1_MouseWheel;