Я пишу пользовательские контейнеры для Windows Forms с автоматическим макетом. Документация Microsoft предлагает использовать следующий код для соблюдения свойства autosize элементов управления:
if (control.AutoSize)
{
control.Size = control.GetPreferredSize(parentDisplayRectangle.Size);
}
Проблема в том, что текстовое поле, похоже, имеет AutoSize, жестко запрограммированный в true, и вызов упомянутого кода заканчивается следующим образом:
Как мне подходить к оценке предпочтительного размера текстовых полей в моих пользовательских элементах управления контейнером?
Обновление : после посещения Referencesource.
В классе DefaultLayout есть полезный комментарий:
// Loop through the AutoSized controls and expand them if they are smaller than
// their preferred size. If expanding the controls causes overlap, bump the overlapped
// control if it is AutoRelocatable.
Похоже, идея AutoSize - разрешить управлениебыть больше, чем задумано, а не точно точно размер, возвращаемый из GetPreferredSize.
Это должно быть подтверждено, хотя.
Источник: DockAndAnchorLayout.cs, класс DefaultLayout