3

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

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

有没有更好的方法来解决这个问题?

4

2 回答 2

1

试试这个:

Outer panel:{AutoScroll=true, Dock=Fill}
Inner panel:{Dock=Top,Width=customwidth}
于 2011-12-29T22:09:53.000 回答
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;
    }
于 2011-12-29T22:15:12.843 回答