C# · 12月 23, 2021

c# – 放置在TableLayout中的对接控件不会自动缩小到其创建大小的大小

这个问题比所解释的更好地展示,所以我已经设置了一个使用Visual Studio 2010项目的 git repo,用于查看问题.

我有一个项目,我已经将一个Combo@R_947_2419@控件(comboField)添加到TableLayout控件(tableLayoutPanel1).我已经将Combo@R_947_2419@的Dock属性设置为Fill,以便填充已放置在TableLayout控件中的单元格.我还将TableLayout控件的Dock属性设置为Fill,以便填充Form它被放在了. Combo@R_947_2419@的宽度目前为193像素.

当我运行窗体并增加宽度时,Combo@R_947_2419@的大小会按预期的增加.当我减小表单的大小时,Combo@R_947_2419@的大小减小到达原始大小(193像素).在这一点上,Combo@R_947_2419@的宽度不会进一步减小,导致控件的右侧被剪切.这与我预期的相反:由于没有指定MinimumSize,Combo@R_947_2419@的宽度将减小到0.没有为表单上的任何其他控件(如TableLayout控件)指定了MinimumSize.

在相关的情况下,TableLayout的第一列的宽度被设置为100像素的绝对大小,而TableLayout的第二列的宽度已设置为AutoSize.

任何人都可以清楚,为什么这种形式与我的期望相违背,并就如何以我想要的方式得到这种工作提供建议?任何帮助将不胜感激.

解决方法 tablelayoutpanel似乎存储控件的初始大小,不管它们是对接,锚定还是其他任何值,如AutoSizeMode.GrowAndShrink,都不会使它们更小.在设计器中,对接控件的大小总是存储的,所以我发现最简单的方法是在initializecponpon后将宽度设置为0(由于控件停靠,实际上不会调整组合框的大小,允许桌面面板使其与设置的宽度一样小) InitializeComponent(); comboField.Width = 0;