使控制对接和滚动条播放得很好

时间:2011-12-29 22:00:43

标签: c# .net winforms autoscroll tablelayoutpanel

我有一个面板有时需要比自然适合更多的垂直屏幕空间,所以它需要能够垂直滚动。所以,它都设置为AutoScroll。

控件包含在TableLayoutPanel中并设置为dock,因此他们应调整宽度以匹配。然而,当控件触发滚动条时,总是最终会创建一个水平滚动条,即使对于被违反的控件没有最小宽度约束。它基于先前的宽度创建水平滚动条,而不是遵循停靠命令并重新绘制控件以适应新的宽度。

还有更好的解决方法吗?

2 个答案:

答案 0 :(得分:2)

试试这个:

Outer panel:{AutoScroll=true, Dock=Fill}
Inner panel:{Dock=Top,Width=customwidth}

答案 1 :(得分:1)

是的,这是计算布局方式的必然结果。摆脱水平滚动条需要多次通过计算,但.NET只进行一次通过。有充分理由,布局可以是双稳态的,在两个状态之间来回无休止地翻转。

我真的不明白TableLayoutPanel在这里是如何有用的,或者是什么使它成长。一般来说,只是不要停靠它,给它你想要填充面板的大小。也许是这样的事情:

    bool resizingTlp;

    private void tableLayoutPanel1_Resize(object sender, EventArgs e) {
        if (resizingTlp) return;
        resizingTlp = true;
        if (tableLayoutPanel1.Height <= panel1.ClientSize.Height) tableLayoutPanel1.Width  panel1.ClientSize.Width;
        else tableLayoutPanel1.Width = panel1.ClientSize.Width - SystemInformation.VerticalScrollBarWidth;
        resizingTlp = false;
    }