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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top