-->

放置在TableLayout停靠控件不会自动尺寸比他们的创造尺寸更小(Docked controls

2019-07-29 22:57发布

这个问题更好的表现出比解释,所以我成立了一个git仓库与可用于查看问题在行动的Visual Studio 2010项目。

我在那里我已经添加了一个ComboBox控件(项目comboField )到TableLayout控制( tableLayoutPanel1 )。 我给自己定的Dock ComboBox的属性来Fill ,使其充满,它已经被放置在了TableLayout控制的小区。我还设置了Dock的TableLayout控制的财产Fill ,使其充满了的Form它被放置在。 组合框的宽度是目前193个像素。

当我运行形式和增加它的宽度,组合框的尺寸增加时,如所预期。 当我减少窗体的大小,组合框的大小,直到达到它的原始大小(193个像素)降低。 在该点处,在组合框的宽度将不进一步降低任何,导致在控制的右手侧被修剪。 这是相反的是我期望:组合框的宽度将减少到零,因为没有任何MinimumSize指定了。 既不具有MinimumSize被用于任何形式的其它控制,如控制TableLayout的指定。

在情况下,它是相关的,所述TableLayout的第一列的宽度已被设置为Absolute的100个像素的大小,而TableLayout的第二列的宽度被设定为AutoSize

任何人都可以阐明为什么这种形式表现出乎我的意料任何光线和我如何能得到我想要的方式这方面的工作提出建议? 任何帮助将非常感激。

Answer 1:

该TableLayoutPanel中似乎存储控制的初始大小和从来没有让他们更小,无论对接,锚固或如AutoSizeMode.GrowAndShrink任何其他值。 在设计师的对接控制的大小总是会被保存,所以我发现的最简单的方法是将宽度设置为0在InitializeComponent后(因为控制停靠,也不会真正调整组合框,但它会允许TableLayoutPanel中,使之小到设定宽度)

        InitializeComponent();
        comboField.Width = 0;


Answer 2:

我下载了你的代码,做了这种变化。 现在的工作 -

执行第2列的对的SizeType%,而使其100%

设计师代码: -

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



文章来源: Docked controls placed within TableLayout do not automatically size smaller than their creation size