Comment prévenir la souris Faire défiler ToolStripComboBox?
-
27-09-2019 - |
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?
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