11

这个问题比解释得更好,所以我用 Visual Studio 2010 项目设置了一个git 存储库,用于查看问题的实际情况。

我有一个项目,我已将 ComboBox 控件 ( comboField) 添加到 TableLayout 控件 ( tableLayoutPanel1)。我已将DockComboBox 的属性设置为,Fill以便它填充它所在的 TableLayout 控件的单元格。我还将DockTableLayout 控件的属性设置为,Fill以便它填充它已放置的表单在。ComboBox 的宽度当前为 193 像素。

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

如果相关,TableLayout 的第一列的宽度设置为Absolute100 像素,而 TableLayout 的第二列的宽度设置为AutoSize.

任何人都可以解释为什么这个表格的行为与我的期望相反,并建议我如何以我想要的方式让它工作?任何帮助将非常感激。

4

2 回答 2

11

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

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

设计师代码:-

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

在此处输入图像描述

于 2012-06-15T13:09:02.307 回答
5

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

        InitializeComponent();
        comboField.Width = 0;
于 2012-06-15T12:14:16.460 回答