首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在combobox VB.NET中禁用鼠标滚轮

问在combobox VB.NET中禁用鼠标滚轮
EN

Stack Overflow用户
提问于 2010-06-04 01:08:44
回答 7查看 20.9K关注 0票数 9

有人知道在组合框或列表框这样的控件具有焦点时禁用鼠标滚轮的方法吗?对于我来说,combobox就是我所需要的答案。

我设置了一个组合框来触发SelectedIndexChanged上的SQL查询,当组合框具有焦点时,不小心滚动滚轮会导致大约六个SQL查询同时启动。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-06-04 01:46:09

ComboBox控件不允许您轻松重写MouseWheel事件的行为。向您的项目添加一个新类,并粘贴如下所示的代码。编译。将新控件从工具箱顶部拖放到窗体上。

代码语言:javascript
复制
Friend Class MyComboBox
    Inherits ComboBox

    Protected Overrides Sub OnMouseWheel(ByVal e As MouseEventArgs)
        Dim mwe As HandledMouseEventArgs = DirectCast(e, HandledMouseEventArgs)
        mwe.Handled = True
    End Sub
End Class

请注意,这也会禁用下拉列表中的滚轮。

票数 10
EN

Stack Overflow用户

发布于 2013-01-08 19:59:30

我发现了一个混合响应,将此代码放在MouseWheel事件中:

代码语言:javascript
复制
Dim mwe As HandledMouseEventArgs = DirectCast(e, HandledMouseEventArgs)
mwe.Handled = True

就这样。如果您的项目处于高级状态,则不需要创建新类。

票数 15
EN

Stack Overflow用户

发布于 2010-06-04 01:45:26

如果你对控件进行子类化,这是可能的(为C#道歉)

代码语言:javascript
复制
public class NoScrollCombo : ComboBox
{
    [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
    protected override void WndProc(ref Message m)
    {
        if (m.HWnd != this.Handle)
        {
            return;
        }

        if (m.Msg == 0x020A) // WM_MOUSEWHEEL
        {
           return;
        }

        base.WndProc(ref m);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2968189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档