Состыкованные элементы управления, расположенные в TableLayout, не имеют размер автоматически меньше размера их создания

Эта проблема лучше продемонстрирована, чем объяснено, поэтому я создал git repo с проектом Visual Studio 2010, который будет использоваться для см. вопрос в действии.

У меня есть проект, в котором я добавил элемент управления ComboBox (comboField) в элемент управления TableLayout (tableLayoutPanel1). Я установил свойство Dock для ComboBox на Fill, чтобы он заполнил ячейку элемента управления TableLayout, в который он был помещен. Я также установил свойство Dock элемента управления TableLayout на Fill, чтобы заполнить форму, на которую она была помещена. Ширина ComboBox в настоящее время составляет 193 пикселя.

Когда я запускаю форму и увеличиваю ее ширину, размер ComboBox увеличивается, как и ожидалось. Когда я уменьшаю размер формы, ComboBox уменьшает размер до тех пор, пока не достигнет первоначального размера (193 пикселя). В этот момент ширина ComboBox больше не будет уменьшаться, в результате чего правая часть элемента управления будет обрезана. Это противоречит тому, что я ожидал бы: ширина ComboBox будет уменьшаться до нуля, если не указано значение MinimumSize. Также не указано MinimumSize для любого из других элементов управления в форме, например, для элемента управления TableLayout.

В случае, если это имеет значение, ширина первого столбца TableLayout имеет значение Absolute размером 100 пикселей, а ширина второго столбца таблицыLayout установлена ​​равной AutoSize.

Может ли кто-нибудь пролить свет на то, почему эта форма ведет себя вопреки моим ожиданиям и подсказывает, как я могу заставить это работать так, как я хочу? Любая помощь будет высоко оценена.

Ответ 1

В таблице tablelayoutpan, по-видимому, хранятся начальные размеры элементов управления и никогда их не уменьшают независимо от стыковки, привязки или любых других значений, таких как AutoSizeMode.GrowAndShrink. В дизайнере размер пристыкованного элемента управления всегда будет сохранен, поэтому самый простой метод, который я нашел, - установить ширину в 0 после инициализации элемента (поскольку элемент управления состыкован, он фактически не будет изменять размер выпадающего списка, но он будет разрешите панели tablelayout сделать ее такой же маленькой, как заданная ширина)

        InitializeComponent();
        comboField.Width = 0;

Ответ 2

Я загрузил ваш код и сделал это изменение. он работает сейчас -

Сделайте 2-й столбец SizeType равным проценту и сделайте его 100%

Код дизайнера:

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

enter image description here