在一个面板中仅支持水平滚动

5

如何设置我的面板只能水平滚动? 我已经尝试过:

this.VerticalScroll.Enabled = false;

但它不起作用。

“this” 是面板还是承载窗体?“不工作” 会如何表现? - kaj
这是一个面板。当将VerticalScroll.Enabled设置为false时,我仍然可以双向滚动。 - Klaasvaak
1
类似的问题 https://dev59.com/Em035IYBdhLWcg3wVebn - CuriousMind
谢谢链接,我已经修好了。不过必须稍微改动了一下。 - Klaasvaak
避免让用户因为只显示控件的顶部而感到烦恼,而没有任何方法可以让她进入它。只需在调整大小事件处理程序中隐藏不可访问的控件即可。Panel类会执行逻辑下一步并隐藏滚动条。 - Hans Passant
@Hans 我不隐藏控件,因为我有2个面板(splitcontainer)。panel1需要垂直滚动,而panel2需要水平滚动。Panel2有一个非常大的日历视图。当在panel1上垂直滚动时,会使panel2也垂直滚动。 - Klaasvaak
4个回答

5

若要仅水平滚动,请改用以下方法。
(在接受更改之前需要先将自动滚动设置为false)

mypanel.AutoScroll = false;
mypanel.VerticalScroll.Enabled = false;
mypanel.VerticalScroll.Visible = false;
mypanel.VerticalScroll.Maximum = 0;
mypanel.AutoScroll = true;

2

你可以尝试

panel.AutoScroll = true;
panel.HorizontalScroll.Enabled=false;
panel.HorizontalScroll.Visible = false;

1

在我的面板中,使用以下代码可以正常工作:

    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        ShowScrollBar(this.Handle, 1, false);
        base.WndProc(ref m);
    }

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool ShowScrollBar(IntPtr hWnd, int wBar, bool bShow);

0
如果您的面板未执行自动滚动,可以使用它的VScroll属性:
yourPanel.VScroll = false;

如果我没有使用自动滚动,那么我如何能够水平滚动? - Klaasvaak
你可以自己处理 Scroll 事件。然而,我刚刚注意到 ScrollableControl 的文档与 Panel 的文档相矛盾,因为它说即使 AutoScrolltrueVScroll 也会产生影响。所以,在你的情况下可能会起作用,你试过了吗? - Frédéric Hamidi
我的面板自动滚动设置为true,VScroll设置为false。但我仍然可以双向滚动。 - Klaasvaak
注意:如果启用了AutoScroll,HScroll和VScroll将无法工作。 AutoScroll会自动维护滚动条的可见性,因此当启用AutoScroll时,将HScroll或VScroll属性设置为true将没有效果。来源:http://msdn.microsoft.com/en-us/library/system.windows.forms.scrollablecontrol.hscroll.aspx - Klaasvaak
1
确实如此,但是类本身的文档说:“要手动覆盖哪些滚动条可见,请设置VScroll和HScroll属性。如果任一属性设置为false,则相应的滚动条不可见,即使AutoScroll属性设置为true。”看起来像是文档错误。 - Frédéric Hamidi
我在ScrollableControl类页面上报告了它。(见底部) - Klaasvaak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接