2012-12-08 28 views
0

我在Windows窗體應用程序中有幾個面板,他們分爲兩列,最多4行,最多8個面板。每個面板中包含的元素數量在運行時都會發生變化,所以不要在監視器上浪費時間,我將它們全部設置爲自動調整大小。問題是,我不知道如何讓它們保持正確放置,比如當第一個縮小時,其他三個縮小,所以它們之間沒有太多空間。保持面板之間的距離相同

+0

你現在使用的面板放置在4行2列控什麼?如果第一個面板縮小 - 哪些面板應該更改它們的大小 - 面板是從當前行還是從列? –

回答

2

嘗試使用TableLayoutPanelFlowLayoutPanel(或可能甚至是SplitContainer)。它們對於這類任務都非常有用。您可以在工具箱的Containers部分找到它們。您可以通過適當設置面板的邊距來保持正確的距離。 TableLayoutPanel爲您提供了調整行和列(絕對或百分比大小或自動)大小的不同選項。通過使用面板和控件的DockAnchor屬性,您可以在調整大小或添加和刪除控件時獲得動態行爲。

您可能還需要設置控件的MinimumSizeMaximumSize屬性。

您可以添加控件這樣的0​​

int count = tableLayoutPanel1.Controls.Count; 
int newColumn = count % 2; 
int newRow = count/2; 
if (newRow >= tableLayoutPanel1.RowCount) { 
    tableLayoutPanel1.RowCount++; 

    // Set appropriate row style 
    tableLayoutPanel1.RowStyles.Add(new RowStyle { SizeType = SizeType.AutoSize }); 
} 
var newControl = new Button { Dock = DockStyle.Fill }; 
tableLayoutPanel1.Controls.Add(newControl, newColumn, newRow); 
+0

@ lazyberezovsky:這是一個視覺的東西,不是一個代碼的東西。如果面板具有正確的寬度,它們將在「FlowLayoutPanel」中的兩列之後自動換行到下一行。 –

+0

是的,這不是代碼的事情,但說你可以使用TableLayoutPanel控件定位就像說你可以使用Linq從數據庫加載客戶數據:) –

+0

@lazyberezovsky:我爲'TableLayoutPanel'添加了一個例子。 –