Как предотвратить прокрутки мыши в ToolStripCombobox?
-
27-09-2019 - |
Вопрос
Я пытаюсь отключить свиток мыши в моем настроенную систему, я подумал, что смогу поймать событие колеса мыши, но, в то время как событие доступен для 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 с колесом не изменяет выбор, поэтому он работает как ожидалось