使控件停靠和滚动条运行良好

本文关键字:运行 滚动条 控件 停靠 | 更新日期: 2023-09-27 18:19:07

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

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

有没有更好的办法?

使控件停靠和滚动条运行良好

试试这个:

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

是的,这是布局计算方式不可避免的结果。去掉水平滚动条需要多次遍历计算,但. 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;
    }