Définition de la largeur de contrôle de l'enfant dans le gestionnaire d'événements de mise en page du FlowLayoutPanel
-
29-10-2019 - |
Question
J'ai un FlowLayoutPanel qui est rempli dynamiquement de commandes d'enfants. Ce FlowLayoutPanel pourrait être sur certains panneaux sur différentes formes, de sorte que sa taille pourrait changer de temps d'exécution.
Lors de l'ajout du premier contrôle de l'enfant, j'ai réglé sa largeur sur FlowLayoutPanel.Width - 10. Pour les autres contrôles, je définis DockStyle = remplir.
Il existe également FlowLayoutPanel_Layout Event Handler HICH modifie la première largeur de contrôle: FlowLayoutPanel.Controls [0] .Width = FlowLayoutPanel.Width - 10;
Pour la plupart des cas, cela fonctionne bien, mais sur l'un des formulaires, j'ai un problème: lorsque le formulaire est chargé, le FlowLayoutPanel définit la largeur des contrôles sur une valeur (127). Lorsque je maximise le formulaire, FlowLayoutPanel_Layout est appelé avec FlowLayoutPanel.Width 127. Il n'y a ni exception ni rien.
Qu'est-ce qui peut provoquer un tel comportement?
La solution
Trouvé la racine du problème: ce problème apparaît sur Windows Vista 64 bits et 7 lorsqu'il y a beaucoup de contrôles imbriqués:http://blogs.msdn.com/b/alejacma/archive/2008/11/20/Controls-won-t-get-gesized-once-the-nestting-hierarchy-of-windows-excesets-a-cerred- profondeur-x64.aspx
La suppression de sur mon contrôle a contourné: a aidé:
protected override void OnSizeChanged(EventArgs e)
{
if (!DesignMode && IsHandleCreated)
BeginInvoke((MethodInvoker)delegate{base.OnSizeChanged(e);});
else
base.OnSizeChanged(e);
}