Как предотвратить прокрутку мыши в ToolStripComboBox? - PullRequest
2 голосов
/ 24 ноября 2010

Я пытаюсь отключить прокрутку мыши в моем ToolStripComboBox, я думал, что могу перехватить событие колеса мыши, но хотя событие доступно для ComboBox, оно недоступно для ToolStripComboBox.Есть идеи?

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

ToolStripComboBox услужливо раскрывает свой базовый элемент управления ComboBox в его метко названном ComboBox свойстве . Это позволяет нам получить доступ к его свойствам, методам и событиям, которые не были включены в ToolStripComboBox.

И, как вы, вероятно, знаете, стандартный ComboBox элемент управления выставляет MouseWheel событие , которое срабатывает каждый раз, когда колесо мыши прокручивается, когда поле со списком имеет фокус.

Соединяя эти две вещи, мы можем добавить обработчик для базового события ComboBox элемента управления ToolStripComboBox элемента управления и переопределить его поведение по умолчанию.

Итак, если у вас есть форма, содержащая ToolStrip и ToolStripComboBox, вы можете использовать что-то вроде следующего кода:

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

В качестве альтернативы, конечно, вы всегда можете создать подкласс существующего элемента управления ToolStripComboBox и переопределить его поведение таким же образом, как показано выше.

0 голосов
/ 10 сентября 2011

В дополнение к тому, что предложил Коди Грей, вы можете захотеть, чтобы колесико работало, когда выпадающий ящик выпадает. Просто проверьте состояние DroppedDown в дескрипторе 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;
        }
    }

Прокрутка выпадающего списка с колесиком не меняет выбор, поэтому он работает как положено

...