在AutoScroll Panel上预览鼠标滚轮

时间:2014-10-14 12:39:03

标签: c# winforms panel autoscroll

让我们有一个大的Control(其Size在外部给出,“不能”改变。此Control包含在Panel中。功能非常有用Panel.Autoscroll = true,可以轻松滚动大型Control,无需工作。

有一个问题:Control需要处理MouseWheel(它会按预期获取事件 - 它专注于鼠标输入)。很遗憾,Panel 捕获相同的鼠标滚轮事件并将其用于滚动。对于Control“消耗”事件的情况,这是不可取的。

我找不到处理此问题的标准方法。即使Panel.Scroll事件仅在鼠标点击滚动时调用,而不是鼠标滚轮滚动。

是否有一种自然的WinForms友好方式如何临时指示Panel AutoScroll设置为true而不处理鼠标滚轮事件以进行滚动?

1 个答案:

答案 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;
}