Принудительное автоматическое изменение размера WinForms
-
21-09-2019 - |
Вопрос
У меня есть следующая структура в форме Windows:
Form (AutoResize = true, AutoSizeMode = GrowAndShrink)
FlowLayout (AutoResize = true, AutoSizeMode = GrowAndShrink)
GroupBox
GroupBox
GroupBox
StatusStrip
Я ожидаю, что изменение видимости групповых блоков должно привести к привязке окна к новому размеру, чтобы освободить пустое пространство или разместить новые элементы управления.Однако это не происходит автоматически.Если свернуть в трей и потом восстановить форму (т.е.переключить Visible, ShowInTaskbar, WindowState = Normal/Minimized), тогда, когда он появится снова, он обновится правильно.Еще одна вещь, которая его запускает, — это обновление содержимого в StatusStrip внизу страницы (отображение метки, изменение индикатора выполнения и т. д.).Я пробовал различные комбинации Invalidate/Update/OnResize и т. д., вдохновленные вуду, но чувствую, что упускаю что-то более фундаментальное, и надеюсь, что кто-нибудь увидит очевидный недостаток в том, что я описываю.
Все мои обновления виджетов в форме находятся внутри InvokeRequired/Invoke, если это актуально.
Решение
Я не могу воспроизвести эту проблему с помощью простой тестовой формы, использующей настройки вашего макета и свойств.Клиентская область формы сжимается при запуске и увеличивается по мере необходимости, чтобы сделать поле группы видимым, когда я устанавливаю для его свойства Visible значение true.
Вы можете запросить явный перерасчет макета с помощью метода PerformLayout().