Csharp/C#教程:鼠标滚轮在winforms中冒泡?分享


鼠标滚轮在winforms中冒泡?

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

非常感谢

我们将Slider实现为一个完整的自定义用户控件(inheritanceUserControl类),具有自己的外观。

您可能已经注意到UserControl未在“属性”窗口中显示MouseWheel事件。 那里有麻烦。 WM_MOUSEWHEEL消息气泡。 如果具有焦点的控件不处理它,则Windows将其传递给其父级。 反复,直到找到想要处理它的父窗口。 小组在你的情况下。

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

protected override void OnMouseWheel(MouseEventArgs e) { base.OnMouseWheel(e); // do the slider scrolling //.. ((HandledMouseEventArgs)e).Handled = true; } 

如果你动态创建事件就像

 object.event += new EventHandler(eventfunction); 

尝试在调用eventfunction之后取消注册事件

上述就是C#学习教程:鼠标滚轮在winforms中冒泡?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 object.event -= new EventHandler(eventfunction); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1012423.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐