使控件停靠和滚动条运行良好
本文关键字:运行 滚动条 控件 停靠 | 更新日期: 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;
}