2011-12-29 58 views
3

我有一個面板,它有時需要比自然適合更多的垂直屏幕空間,所以它需要能夠垂直滾動。所以,它全部設置爲AutoScroll。製作控制檯和滾動條很好玩

控件包含在TableLayoutPanel中並設置爲停靠,因此它們應調整其寬度以匹配。然而,當控件觸發滾動條時,即使在違反控件時沒有最小寬度限制,它總是在最終創建一個水平滾動條。它基於前一個寬度創建水平滾動條,而不是遵循dock命令並重新繪製控件以適應新的寬度。

有沒有更好的方法呢?

回答

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; 
    } 
2

試試這個:

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

這對我有效。好的解決方案,無需編寫任何代碼。 – mancze 2015-10-23 08:53:42