如何在winforms中禁用表格面板的水平滚动条

Nag*_*agu 17 c# scrollbar tablelayout winforms

嗨,我有一个tablelayoutpanel,我动态绑定控件.当项目数超过面板高度时,显然出现垂直滚动条没有问题.

但同时水平滚动条也出现,即使项目宽度小于面板的宽度.我该如何防止这种情况?

小智 39

int vertScrollWidth = SystemInformation.VerticalScrollBarWidth;

tableLayoutPanel1.Padding = new Padding(0, 0, vertScrollWidth, 0);
Run Code Online (Sandbox Code Playgroud)

  • 有趣的解决方 你有没有机会知道为什么这个巫术有效? (2认同)

小智 7

今天在这上面丢了一些毛,但是我解决了,这就是我最终的结果:

  1. 创建一个继承自TableLayoutPanel的新类(让我们称之为MyTableLayoutPanel),并覆盖MaximumSize属性,如下所示:

    public override Size MaximumSize
    {
        get
        {
            if (Parent != null)
                return new Size(Parent.Width, 0);
            else
                return base.MaximumSize;
        }
        set
        {
            base.MaximumSize = value;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    当然,您可以通过添加另一个属性来决定是否应该返回更改后的MaximumSize来更加通用,但希望对于那些阅读此内容的人来说,这一点很明显.

  2. 将您已获得的TableLayoutPanel更改为新的MyTableLayoutPanel类型.

  3. 将其添加到常规Panel.在此Panel上启用AutoScroll而不是MyTableLayoutPanel(如果您还没有,请在那里禁用它).

  4. 将MyTableLayoutPanel AutoSize属性设置为true,将其Anchor属性设置为Left,Right和Top.


小智 6

我有一个停靠的TableLayoutPanel包含停靠的GroupBoxes和一个设置为100%宽度的列的问题.我不想为这些设置手动大小 - 我希望它们与表单一起调整大小.

奇怪的是,将TableLayoutPanel的右侧填充设置为1(不是滚动条的宽度 - 留下滚动条大小的间隙,如您所料)完全解决了这个问题.这是在C#2010 Express,.NET 4,Windows 8中.不知道这个kludge是否适用于其他变体.

将填充设置为0 似乎解决了IDE中的问题,但实际运行时问题仍然存在.

闻到TableLayoutPanel中的某些错误给我...或者它可能只是我拥有的控件和属性的特定组合(这是一个相当复杂的布局).


小智 1

问题是您的项目恰好是布局面板的宽度,因此当垂直滚动出现时,它会稍微切入您的控件,从而强制水平滚动?如果是这样,您可以缩小控件的宽度以考虑滚动条的可能性,或者您可以尝试在滚动条出现时调整它们。