有什么方法可以将 Winforms 面板设置为水平滚动而不是垂直于鼠标滚轮?

Is there any way to set a Winforms panel to scroll horizontal rather than vertical to mouse wheel?

我有一个 FlowLayoutPanel,它从上到下然后从左到右布置它包含的控件,这样通常它不会有垂直滚动条,只有水平滚动条。因此,当您使用鼠标滚轮时,它会水平滚动。太好了。

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

那么,有什么方法可以告诉 FlowLayoutPanel 或滚动条鼠标滚轮应该始终表示水平? 或者告诉它先到水平条,然后只有在没有水平条时才到垂直条?

子类 FlowLayoutPanel 并覆盖 OnMouseWheel 方法。不要调用 base 方法。复制并粘贴此方法的代码的下半部分:

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

感谢 Loathing 的优秀建议,我也将其标记为答案,我选择简单地检测两个滚动条都打开的情况,在这种情况下,在我调用 base 时暂时关闭 VScroll class的方法。

为什么?因为我担心不调用基本 class 方法的后果,因为您指向该代码的评论……这显然很重要。

我没有看到此解决方案有任何闪烁或其他不良后果,但如果有我应该考虑的缺点,请告诉我。

    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);
        }
     }