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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top