¿Cómo prevenir desplazamiento del ratón en ToolStripComboBox?
-
27-09-2019 - |
Pregunta
Estoy tratando de desactivar el desplazamiento del ratón en mi ToolStripComboBox, pensé que puedo capturar el evento rueda del ratón, pero mientras el evento está disponible para ComboBox, que no está disponible en su lugar para el ToolStripComboBox. Algunas ideas?
Solución
El ToolStripComboBox
expone amablemente su control ComboBox
subyacente en su bien llamado ComboBox
propiedad . Esto nos permite tener acceso a sus propiedades, métodos y eventos que no se han envuelto en el ToolStripComboBox
.
Y, como usted probablemente sabe, el control ComboBox
norma expone una caso MouseWheel
que los incendios cada vez que la rueda del ratón se desplaza mientras que el cuadro combinado está seleccionada.
Poner estas dos cosas juntas, podemos añadir un controlador para el evento ToolStripComboBox
de control de ComboBox
subyacente del control MouseWheel
, y anular su comportamiento predeterminado.
Por lo tanto, suponiendo que tiene un formulario que contiene un ToolStrip
y una ToolStripComboBox
, se puede usar algo como el siguiente código:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//Attach a handler for the MouseWheel event
ToolStripComboBox1.ComboBox.MouseWheel += new MouseEventHandler(ToolStripComboBox_MouseWheel);
}
private void ToolStripComboBox_MouseWheel(object sender, MouseEventArgs e)
{
//Cast the MouseEventArgs to HandledMouseEventArgs
HandledMouseEventArgs mwe = (HandledMouseEventArgs)e;
//Indicate that this event was handled
//(prevents the event from being sent to its parent control)
mwe.Handled = true;
}
}
Como alternativa, por supuesto, siempre se puede subclase el control de ToolStripComboBox
existente y anular su comportamiento no de la misma manera se muestra arriba.
Otros consejos
Además de lo que Cody Grey sugirió es posible que desee muestra el desplazamiento de la rueda de trabajo cuando se deja caer el cuadro combinado. Sólo chech el estado DroppedDown en el mango MouseWheel:
public class MyToolStripComboBox : ToolStripComboBox
{
public MyToolStripComboBox()
{
this.ComboBox.MouseWheel += new MouseEventHandler(ComboBox_MouseWheel);
}
void ComboBox_MouseWheel(object sender, MouseEventArgs e)
{
if (!this.ComboBox.DroppedDown)
((HandledMouseEventArgs)e).Handled = true;
}
}
Desplazamiento cayó cuadro combinado con la rueda de no cambiar la selección, por lo que funciona como se esperaba