Вопрос

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

Это было полезно?

Решение

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

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

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

Итак, предполагая, что у вас есть форма, которая содержит 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 Контроль и переопределите свое поведение там так же, как показано выше.

Другие советы

В дополнение к тому, что Cody Grey предположил, что вы можете захотеть колесо, чтобы работать, когда Combobox сброшен. Просто чехните в ручке Spropdowndown в ручке мыши:


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

Прокрутка сброшенного Combobox с колесом не изменяет выбор, поэтому он работает как ожидалось

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top