我有一個面板,它有時需要比自然適合更多的垂直屏幕空間,所以它需要能夠垂直滾動。所以,它全部設置爲AutoScroll。製作控制檯和滾動條很好玩
控件包含在TableLayoutPanel中並設置爲停靠,因此它們應調整其寬度以匹配。然而,當控件觸發滾動條時,即使在違反控件時沒有最小寬度限制,它總是在最終創建一個水平滾動條。它基於前一個寬度創建水平滾動條,而不是遵循dock命令並重新繪製控件以適應新的寬度。
有沒有更好的方法呢?
我有一個面板,它有時需要比自然適合更多的垂直屏幕空間,所以它需要能夠垂直滾動。所以,它全部設置爲AutoScroll。製作控制檯和滾動條很好玩
控件包含在TableLayoutPanel中並設置爲停靠,因此它們應調整其寬度以匹配。然而,當控件觸發滾動條時,即使在違反控件時沒有最小寬度限制,它總是在最終創建一個水平滾動條。它基於前一個寬度創建水平滾動條,而不是遵循dock命令並重新繪製控件以適應新的寬度。
有沒有更好的方法呢?
沒錯,就是從這樣的佈局的必然結果計算。擺脫水平滾動條需要多次通過計算,但.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;
}
試試這個:
Outer panel:{AutoScroll=true, Dock=Fill}
Inner panel:{Dock=Top,Width=customwidth}
這對我有效。好的解決方案,無需編寫任何代碼。 – mancze 2015-10-23 08:53:42