放置在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));