这个问题比解释的更好,所以我在Visual Studio 2010项目中设置git repo,用于查看实际问题。
我有一个项目,我在其中添加了一个ComboBox控件(comboField
)到TableLayout控件(tableLayoutPanel1
)。我已将ComboBox的Dock
属性设置为Fill
,以便它填充已放入的TableLayout控件的单元格。我还设置了Dock
属性将TableLayout控件更改为Fill
,以便填充已放置的Form。 ComboBox的宽度目前为193像素。
当我运行表单并增加其宽度时,ComboBox的大小会增加,如预期的那样。当我减小表单的大小时,ComboBox的大小会减小,直到达到它的原始大小(193像素)。此时,ComboBox的宽度不会进一步减小,导致控件的右侧被剪裁。这与我的预期相反:ComboBox的宽度将减少到零,因为没有指定MinimumSize
。没有为表单上的任何其他控件指定MinimumSize
,例如TableLayout控件。
如果相关,则TableLayout的第一列的宽度设置为100 {像素}的Absolute
大小,而TableLayout的第二列的宽度设置为{{1 }}
任何人都可以解释为什么这种形式与我的期望相反的行为,并建议如何以我想要的方式实现这种形式?任何帮助将不胜感激。
答案 0 :(得分:10)
我下载了您的代码并进行了此更改。它现在有效 -
将第二列的SizeType设为百分比并使其为100%
设计师代码: -
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
答案 1 :(得分:5)
tablelayoutpanel似乎存储控件的初始大小,并且永远不会使它们变小,无论对接,锚定或任何其他值如AutoSizeMode.GrowAndShrink。在设计器中,对接控件的大小将始终存储,所以我发现最简单的方法是在initializecomponent之后将宽度设置为0(因为控件停靠,它实际上不会调整组合框的大小,但它会允许tablelayoutpanel使其小到设置的宽度)
InitializeComponent();
comboField.Width = 0;