Wie Mäuserolle in ToolStripComboBox zu verhindern?
-
27-09-2019 - |
Frage
Ich versuche, zu deaktivieren Mäuserolle in meinem ToolStripComboBox, ich dachte, dass ich das Mausradevents fangen können, aber während der Veranstaltung für ComboBox zur Verfügung steht, ist es nicht möglich, anstatt für die ToolStripComboBox. Irgendwelche Ideen?
Lösung
Die ToolStripComboBox
machen helfend ihre zugrunde liegende ComboBox
Kontrolle in seinem treffend benannt ComboBox
Eigenschaft . Dies erlaubt uns, seine Eigenschaften, Methoden für den Zugriff auf und Ereignisse, die nicht in die ToolStripComboBox
gewickelt wurden.
Und wie Sie wahrscheinlich wissen, die Standard-ComboBox
Kontrolle aussetzt a MouseWheel
Ereignis , der ausgelöst wird jedes Mal das Mausrad gescrollt wird, während das Kombinationsfeld den Fokus hat.
Setzt man diese beiden Dinge zusammen, können wir einen Handler für das ToolStripComboBox
Ereignis zugrunde liegenden ComboBox
Kontrolle des hinzufügen MouseWheel
Kontrolle und überschreiben die Standardverhalten.
Also, vorausgesetzt, Sie haben ein Formular, die eine ToolStrip
und ToolStripComboBox
enthält, können Sie so etwas wie den folgenden Code verwenden:
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;
}
}
Alternativ kann natürlich, man konnte die bestehende ToolStripComboBox
Kontrolle immer Unterklasse und sein Verhalten außer Kraft setzt es auf die gleiche Art und Weise gezeigt oben.
Andere Tipps
Zusätzlich zu dem, was Cody Grau vorgeschlagen, dass Sie das Rad scolling arbeiten wollen, wenn die Combobox fallen gelassen wird. chech einfach den DroppedDown Zustand in Mausrad Griff:
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;
}
}
fiel Scrolling Combobox mit Rad, um die Auswahl nicht ändert, so dass es wie erwartet funktioniert