Question

Je suis en train de désactiver défilement de la souris dans mon ToolStripComboBox, je pensais que je peux attraper l'événement Wheel Mouse, mais alors que l'événement est disponible pour ComboBox, ce n'est pas disponible à la place du ToolStripComboBox. Toutes les idées?

Était-ce utile?

La solution

Le ToolStripComboBox expose obligeamment son contrôle ComboBox sous-jacent dans son porte bien son nom ComboBox propriété. Cela nous permet d'accéder à ses propriétés, méthodes et événements qui ne sont pas été enveloppés dans le ToolStripComboBox.

Et, comme vous le savez probablement, le contrôle standard ComboBox expose un événement MouseWheel que les incendies chaque fois que la molette de la souris défile alors que la zone de liste déroulante a le focus.

Mettre ces deux choses ensemble, nous pouvons ajouter un gestionnaire pour l'événement ToolStripComboBox de contrôle ComboBox sous-jacente du contrôle MouseWheel, et remplacer son comportement par défaut.

Alors, supposant que vous avez une forme qui contient un ToolStrip et un ToolStripComboBox, vous pouvez utiliser quelque chose comme le code suivant:

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;
   }
}

Sinon, bien sûr, vous pouvez toujours sous-classe le contrôle de ToolStripComboBox existant et passer outre son comportement il de la même manière indiquée ci-dessus.

Autres conseils

En plus de ce que Cody Grey suggère que vous voudrez peut-être la roue Scolling au travail lorsque le combobox est tombé. Juste chech l'état DroppedDown dans la poignée 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;
        }
    }

Scrolling a chuté combobox avec la roue ne change pas la sélection, de sorte qu'il fonctionne comme prévu

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top