【问题标题】:Prevent scrolling in comboboxes (mouse over)防止在组合框中滚动(鼠标悬停)
【发布时间】:2021-02-05 07:40:36
【问题描述】:

当鼠标悬停在组合框上(鼠标悬停)时,我想防止在组合框中滚动。我已经尝试过以下解决方案,但它只会在组合框展开时停止滚动。

C# - how do I prevent mousewheel-scrolling in my combobox?

【问题讨论】:

  • 你的项目是什么类型的?链接的项目是wpf,但是你在这里使用winforms标签。
  • 这是一个普通的 Windows 窗体应用程序,但答案也适用于 Winfroms 中的 UserControls (stackoverflow.com/a/1883072/5586390)
  • 我测试了它,它可以工作(组合框未展开)。您评论中的UserControls 是什么?
  • 您添加了事件处理程序吗?它没有在 PropertyGrid 中列出(它设置为 [Browsable(false)])。您必须在父窗体的构造函数中手动添加它(或任何其他托管它的窗口)。你能证明你做了什么吗?

标签: winforms combobox mouseevent mousewheel


【解决方案1】:

您需要扩展 ComboBox 控件,并隐藏 MouseWheel 消息。

类似这样的:

public class ComboBoxEx : ComboBox
{
    protected override void WndProc(ref Message m) 
    {
        if (m.Msg == 522 /* WM_MOUSEWHEEL */) 
        {
            return;
        }

        base.WndProc(ref m);
    }
}

【讨论】:

    【解决方案2】:
     public static void Combo_MouseWheel(object sender, MouseEventArgs e)
            {
                ComboBox cmb = (ComboBox)sender;
                if (!cmb.DroppedDown)
                {
                    ((HandledMouseEventArgs)e).Handled = true;
                    //this.Focus();
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2012-07-21
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2010-12-25
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多