【发布时间】:2014-10-14 12:39:02
【问题描述】:
让我们有一个大的Control(它的Size 是外部给出的并且“不能”改变)。这个Control 包含在Panel 中。有一个非常有用的功能Panel.Autoscroll = true,它可以轻松滚动大Control,而无需工作。
有一个问题:Control 需要处理MouseWheel(它按预期获取事件 - 它专注于鼠标输入)。幸运的是,Panel also 捕获了相同的鼠标滚轮事件并将它们用于滚动。对于Control“消耗”事件的情况,这是不可取的。
我找不到处理此问题的标准方法。甚至Panel.Scroll 事件也仅在鼠标单击滚动时调用,而不是鼠标滚轮滚动。
是否有一种自然的 WinForms 友好方式如何临时指示 Panel 将 AutoScroll 设置为 true 不处理鼠标滚轮事件以进行滚动?
【问题讨论】:
-
问题是控件不消耗事件。它使用该事件,然后让它冒泡到其父级。后台is here.
-
是的,我知道它没有,但由于 MouseEventArgs 中没有标志来表示它,它提出了我的问题。你怎么知道它实际上是 HandledMouseEventArgs (因此它包含消费标志)?只需(安全地)投射它并为消费情况设置 Handled 就足够了。谢谢!
-
不知道这一点。甚至比 ILSpy 还要好。
标签: c# winforms panel autoscroll