让我们有一个大的Control
(其Size
在外部给出,“不能”改变。此Control
包含在Panel
中。功能非常有用Panel.Autoscroll = true
,可以轻松滚动大型Control
,无需工作。
有一个问题:Control
需要处理MouseWheel
(它会按预期获取事件 - 它专注于鼠标输入)。很遗憾,Panel
也捕获相同的鼠标滚轮事件并将其用于滚动。对于Control
“消耗”事件的情况,这是不可取的。
我找不到处理此问题的标准方法。即使Panel.Scroll
事件仅在鼠标点击滚动时调用,而不是鼠标滚轮滚动。
是否有一种自然的WinForms友好方式如何临时指示Panel
AutoScroll
设置为true而不处理鼠标滚轮事件以进行滚动?
答案 0 :(得分:2)
使用此版本将AutoScroll = True替换为面板,该版本注释了对OnMouseWheel方法的基本调用:
public class PanelEx: Panel {
protected override void OnMouseWheel(MouseEventArgs e) {
//base.OnMouseWheel(e);
}
}
或者Hans从他的linked answer中指出,在你的控件中将Handled属性设置为true:
protected override void OnMouseWheel(MouseEventArgs e) {
base.OnMouseWheel(e);
((HandledMouseEventArgs)e).Handled = true;
}