WinForms Forcing AutoResize arrive
-
21-09-2019 - |
Question
J'ai la structure suivante dans un formulaire Windows:
Form (AutoResize = true, AutoSizeMode = GrowAndShrink)
FlowLayout (AutoResize = true, AutoSizeMode = GrowAndShrink)
GroupBox
GroupBox
GroupBox
StatusStrip
Mon attente est que le changement de visibilité des zones de groupe doit faire la fenêtre pour enclencher une nouvelle taille pour récupérer l'espace vide, ou accueillir de nouveaux contrôles. Toutefois, cela ne se fait pas automatiquement. Si je réduis sur le plateau, puis restaurer la forme (à savoir basculer visible, ShowInTaskbar, WindowState = Normal / Minimized), puis quand il réapparaît, il aura mis à jour correctement. Une autre chose qui le déclenche est une mise à jour du contenu dans un StatusStrip au bas de la page (montrant une étiquette, la modification d'un barre de progression, etc.). J'ai essayé différentes combinaisons de Invalider / Mise à jour / OnResize etc, mais je sens que j'inspiré voodoo-je manque quelque chose d'un peu plus fondamental et nous espérons que quelqu'un peut voir le défaut évident dans ce que je décris.
Toutes mes mises à jour des widgets sur le formulaire sont à l'intérieur InvokeRequired / Invoke, si cela est pertinent.
La solution
Je ne peux pas repro ce problème avec une forme de test simple qui utilise vos paramètres de mise en page et la propriété. Espace client du formulaire est rétracté au démarrage et se développe au besoin pour rendre la zone de groupe visible quand je mis sa propriété Visible à true.
Vous pouvez demander un recalcul de mise en page explicite avec la méthode PerformLayout ().