首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >鼠标滚轮在winforms中冒泡?

鼠标滚轮在winforms中冒泡?
EN

Stack Overflow用户
提问于 2011-08-08 22:35:42
回答 2查看 3.7K关注 0票数 5

我对winforms和鼠标滚轮事件有点小问题。我有一个表示滑块的自定义用户控件。现在,我有几组滑块,每组都被包裹在一个面板中。然后将所有组包装在另一个面板中(该面板将AutoScroll设置为true),并将其包装在一个表单中。实现滑块逻辑,以便可以使用鼠标滚轮来改变其值。为此,滑块用户控件在鼠标悬停在滑块上时获得焦点。但是,当我滚动时,AutoScroll父面板也随之滚动。我已经在这个问题上浪费了很多时间。有人知道这里发生了什么吗?我该如何解决它?我以为事件会冒泡到父面板,但在Slider控件中处理它时,我没有在事件上找到Handled属性(就像使用WPF时可能的那样)。

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-09 03:15:12

我们将滑块实现为一个完整的自定义用户控件(继承了UserControl类),具有自己的外观。

您可能已经注意到,UserControl不会在“属性”窗口中显示MouseWheel事件。有麻烦的迹象。WM_MOUSEWHEEL消息将弹出。如果具有焦点的控件不能处理它,Windows就会将它传递给它的父级。重复执行,直到找到想要处理它的父窗口。你的案子里的专家小组。

你需要在你的滑块控件中调用一些黑魔法。传递给MouseWheel事件的实际事件参数对象不是事件签名所暗示的MouseEventArgs类型,而是HandledMouseEventArgs类型。它可以让你停止冒泡。如下所示:

代码语言:javascript
复制
    protected override void OnMouseWheel(MouseEventArgs e) {
        base.OnMouseWheel(e);
        // do the slider scrolling
        //..
        ((HandledMouseEventArgs)e).Handled = true;
    }
票数 16
EN

Stack Overflow用户

发布于 2011-08-08 22:53:16

如果您像这样动态创建事件

代码语言:javascript
复制
object.event += new EventHandler<EventArgs>(eventfunction);

尝试在调用eventfunction后注销事件,如下所示

代码语言:javascript
复制
object.event -= new EventHandler<EventArgs>(eventfunction);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6983757

复制
相关文章

相似问题

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