放置在TableLayout中的停靠控件的自动大小不会小于其创建大小

这个问题比解释的更好,所以我在Visual Studio 2010项目中设置了一个git repo ,用于查看实际问题。

我有一个项目,我已经将一个ComboBox控件( comboField )添加到TableLayout控件( tableLayoutPanel1 )。 我已将ComboBox的Dock属性设置为Fill以便它填充已放入的TableLayout控件的单元格。我还将TableLayout控件的Dock属性设置为Fill以便填充Form它被放置了。 ComboBox的宽度目前为193像素。

当我运行窗体并增加其宽度时,ComboBox的大小会增加,如预期的那样。 当我减小窗体的大小时,ComboBox的大小会缩小, 直到达到原始大小(193像素)。 此时,ComboBox的宽度不会进一步减小,导致控件的右侧被剪裁。 这与我的预期相反:ComboBox的宽度将减少到零,因为没有指定MinimumSize 。 没有为MinimumSize上的任何其他控件指定MinimumSize ,例如TableLayout控件。

如果它是相关的,TableLayout的第一列的宽度设置为100像素的Absolute大小,而TableLayout的第二列的宽度已设置为AutoSize

任何人都可以阐明为什么这种forms的表现与我的期望相反,并建议我如何以我想要的方式运作? 任何帮助将非常感激。

tablelayoutpanel似乎存储控件的初始大小,并且永远不会使它们变小,无论对接,锚定或任何其他值如AutoSizeMode.GrowAndShrink。 在设计器中,对接控件的大小将始终存储,因此我发现最简单的方法是在initializecomponent之后将宽度设置为0(因为控件停靠,它实际上不会调整combobox的大小,但它会允许tablelayoutpanel使其小到设置的宽度)

  InitializeComponent(); comboField.Width = 0; 

我下载了您的代码并进行了此更改。 它现在有效 –

将第二列的SizeType设为百分比并使其成为100%

设计师代码: –

 this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); 

在此处输入图像描述