Domanda

Sto cercando di disabilitare scorrimento del mouse nel mio ToolStripComboBox, ho pensato che posso prendere l'evento rotellina del mouse, ma mentre l'evento è disponibile per ComboBox, non è disponibile, invece, per il ToolStripComboBox. Tutte le idee?

È stato utile?

Soluzione

Il ToolStripComboBox espone utilmente il suo controllo ComboBox sottostante nel suo proposito chiamato ComboBox proprietà . Questo ci permette di accedere alle sue proprietà, metodi ed eventi che non erano stati avvolti nella ToolStripComboBox.

E, come probabilmente sapete, il controllo ComboBox norma espone una evento MouseWheel che spara ogni volta la rotellina del mouse viene fatto scorrere mentre la casella combinata è attivo.

Mettendo queste due cose insieme, siamo in grado di aggiungere un gestore per sottostante eventi ToolStripComboBox del controllo ComboBox del controllo MouseWheel, e ignorare il comportamento predefinito.

Quindi, supponendo che si dispone di un modulo che contiene un ToolStrip e ToolStripComboBox, si può usare qualcosa come il seguente codice:

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

In alternativa, naturalmente, si può sempre sottoclasse il controllo ToolStripComboBox esistente e ignorare il suo comportamento non nello stesso modo sopra indicato.

Altri suggerimenti

In aggiunta a quanto Cody Grey suggerito si consiglia la scolling ruota per lavoro quando la casella combinata è caduto. Basta chech lo stato DroppedDown maniglia 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;
        }
    }

Lo scorrimento è sceso casella combinata con la ruota non cambia la selezione, quindi funziona come previsto

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top