2012-12-08 24 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'添加了一个例子。 –