Come prevenire scorrimento del mouse in ToolStripComboBox?
-
27-09-2019 - |
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?
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