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

StackOverflow https://stackoverflow.com/questions/1783642

  •  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().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top