Définition de la largeur de contrôle de l'enfant dans le gestionnaire d'événements de mise en page du FlowLayoutPanel

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

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?

Était-ce utile?

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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top