如何防止ToolStripComboBox中的鼠标滚动?

时间:2010-11-24 08:02:53

标签: c# winforms combobox mousewheel toolstripcombobox

我正在尝试在ToolStripComboBox中禁用鼠标滚动,我以为我可以捕获鼠标滚轮事件,但是当事件可用于ComboBox时,它不适用于ToolStripComboBox。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

ToolStripComboBox有助于在名称恰当的ComboBox property中公开其基础ComboBox控件。这允许我们访问未包含在ToolStripComboBox中的属性,方法和事件。

而且,正如您可能知道的那样,标准ComboBox控件会在组合框具有焦点时每次滚动鼠标滚轮时触发MouseWheel event

将这两件事放在一起,我们可以为ToolStripComboBox控件的基础ComboBox控件的MouseWheel事件添加处理程序,并覆盖其默认行为。 < / p>

因此,假设您的表单包含ToolStripToolStripComboBox,则可以使用以下代码:

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控件进行子类化,并以与上面相同的方式覆盖其行为。

答案 1 :(得分:0)

除了Cody Gray建议您在组合框掉落时可能需要轮子晃动。只需在MouseWheel句柄中填充DroppedDown状态:


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

使用滚轮滚动下降的组合框不会改变选择,因此它按预期工作