如何在Panel中禁用水平滚动条

Eli*_*kiy 24 c# winforms

我有一个面板(Windows窗体),我想禁用面板水平滚动条.我试过这个:

HorizontalScroll.Enabled = false;
Run Code Online (Sandbox Code Playgroud)

但那不行.

我怎样才能做到这一点?

小智 57

尝试以这种方式实现,它将100%工作

panel.HorizontalScroll.Maximum = 0;
panel.AutoScroll = false;
panel.VerticalScroll.Visible = false;
panel.AutoScroll = true;
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案.没有其他人为我工作,但这个简单的代码实际上修复了它! (9认同)
  • 我一直挂着的东西非常重要!确保在设计模式下"AutoScroll"属性设置为"FALSE",否则无效. (7认同)
  • 这个巫术到底是什么...命令的顺序没有逻辑意义。但这有效... (2认同)

Sup*_*Oli 20

如果你想亵渎你的代码,你可以试试这个非常"hackish"的解决方案:

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

private enum ScrollBarDirection
{
    SB_HORZ = 0,
    SB_VERT = 1,
    SB_CTL = 2,
    SB_BOTH = 3
}

protected override void WndProc(ref System.Windows.Forms.Message m)
{
    ShowScrollBar(panel1.Handle, (int)ScrollBarDirection.SB_BOTH, false);
    base.WndProc(ref m);
}
Run Code Online (Sandbox Code Playgroud)

我目前正在使用上面的代码来阻止第三方UserControl显示其滚动条.他们没有暴露任何隐藏它们的正确方法.

  • 效果很好!虽然肯定不需要`WndProc`部分.只需调用:`ShowScrollBar(panel1.Handle,(int)ScrollBarDirection.SB_HORZ,false);`从任何时候想要隐藏滚动条的其他方法! (5认同)

Dav*_*e M 13

我认为您遇到此问题是因为面板的AutoScroll属性设置为true.我制作了一个测试解决方案(.NET 3.5)并发现了以下内容:

如果你试试这个:

panel.AutoScroll = true;
panel.HorizontalScroll.Enabled = false;
panel.HorizontalScroll.Visible = false;
Run Code Online (Sandbox Code Playgroud)

Horizo​​ntalScroll.Enabled和.Visible 不会更改为false(假设面板中有控件导致autoscroll显示水平滚动条).您似乎必须禁用AutoScroll才能手动更改这些属性.


Jef*_*ffR 6

我遇到了同样类型的问题,当AutoScroll = true时出现水平滚动,它只出现在垂直滚动条出现时.我终于想通了我从面板上移除了填充,并且通过向右边填充添加20,它允许垂直滚动条出现而不显示水平滚动条.