2015-11-03 41 views
0

我有一个FlowLayoutPanel,它包含自顶向下包含的控件,然后从左到右,这样通常它从不具有垂直滚动条,只是一个水平滚动条。所以当你使用鼠标滚轮时,它会水平滚动。大。有没有什么办法可以设置Winforms面板滚动而不是垂直滚动鼠标滚轮?

直到用户增长一个比屏幕更高的控件...然后它必须有一个垂直滚动条。精细。但是一旦出现垂直滚动条,鼠标滚轮输入就开始垂直滚动。坏。

那么,有什么办法可以告诉FlowLayoutPanel或滚动条鼠标滚轮应该总是水平的吗? 或者告诉它先去水平线,然后再去垂直,如果没有水平的话?

回答

0

由于厌恶的很好的建议,我也被标记为一个答案,我选择了简单地检测其中两个滚动条上的情况下在这种情况下暂时关闭VScroll,同时调用基类的方法。

为什么?因为考虑到你指出的代码的评论,所以我担心NOT调用基类方法的后果......这显然很重要。

我没有看到这个解决方案有任何闪烁或其他不好的后果,但请让我知道是否有我应该考虑的缺点。

protected override void OnMouseWheel(MouseEventArgs e) 
    { 
     if (this.PreferHorizontalScroll && this.VScroll && this.HScroll) 
     { 
      this.VScroll = false; 
      base.OnMouseWheel(e); 
      this.VScroll = true; 
     } 
     else 
     { 
      base.OnMouseWheel(e); 
     } 
    } 
1

子类FlowLayoutPanel并覆盖OnMouseWheel方法。不要拨打base方法。复制和代码的下半部分贴从此方法:

http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/ScrollableControl.cs,c3f702621158871b

+0

感谢您的建议。看着你指给我的代码,我看到了对base.OnMouseWheel(e)调用的评论,这似乎暗示重要的是这被称为last ...所以,不要称它听起来很可怕。另外我讨厌将基本代码复制到派生类中。但是,基于这个建议,我制定了一个替代答案,下面贴出来。谢谢!!! –

相关问题