Состыкованные элементы управления, расположенные в 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]()