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

时间:2012-06-15 11:48:24

标签: c# .net winforms visual-studio-2010 tablelayoutpanel

这个问题比解释的更好,所以我在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 }}

任何人都可以解释为什么这种形式与我的期望相反的行为,并建议如何以我想要的方式实现这种形式?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:10)

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

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

设计师代码: -

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

enter image description here

答案 1 :(得分:5)

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

        InitializeComponent();
        comboField.Width = 0;