Принудительное автоматическое изменение размера WinForms

У меня есть следующая структура в форме 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, если это уместно.


person Thom    schedule 23.11.2009    source источник


Ответы (1)


Я не могу воспроизвести эту проблему с помощью простой тестовой формы, в которой используются настройки вашего макета и свойств. Клиентская область формы сжимается при запуске и увеличивается по мере необходимости, чтобы сделать поле группы видимым, когда я устанавливаю для его свойства Visible значение true.

Вы можете запросить явный перерасчет макета с помощью метода PerformLayout().

person Hans Passant    schedule 23.11.2009