2010-03-25 3 views
1

J'ai un FlowLayoutPanel propriétés:panneau Nested FlowLayout pas envelopper

  • Dock = Fill (dans un usercontrol)
  • flowDirection = Topdown
  • WrapContents = false

I faites de cette façon afin que chaque élément ajouté au panneau soit ajouté au fond.

Les éléments que j'ajoute à ce panneau sont des contrôles usuels qui ont eux-mêmes des FlowLayoutPanels, mais ils ont le comportement standard (LeftToRight, WrapContents = true). Le problème que j'ai est que FlowLayoutPanel de l'intérieur d'usercontrol ne se redimensionne pas pour remplir le contrôle externe, mais quand je mets l'autosizing à vrai sur ces commandes, alors le panneau ne couvrira pas son contenu - qui est un problème connu apparemment .

Si elle aide à visualiser ce que je suis en train de faire, il ressemble à ceci:

 
    ______________________________ 
    | __________________________ | Outer box = exterior flowlayout 
    | |Text____________________| | (TopDown, NoWrap) 
    | | # # # # # # # # # # # #| | 
    | | # # # #    | | Interior boxes = usercontrols with text and a 
    | |________________________| | flowlayoutpanel on them 
    | __________________________ | (LeftToRight, Wrap) 
    | |Text____________________| | 
    | | # # # # # # # # # # # #| | # = pictures 
    | | # #     | | 
    | |________________________| | 
    |____________________________| 

Répondre

0

Je ne pense pas que vous pouvez amarrer les commandes dans un FlowLayoutPanel, à moins que vous sous-classe LayoutEngine et faire votre propre version du volet en utilisant votre moteur personnalisé. Cependant, il existe une solution géniale à ce problème. Utilisez un TableLayoutPanel! Puisque vous ne voulez qu'une colonne, il est très facile d'utiliser un TableLayoutPanel à cette fin. La seule mise en garde est que le TLP doit initialement avoir 0 lignes, et vous ajoutez ensuite les contrôles de l'utilisateur par programme. Et l'astuce consiste à ancrer le contrôle de l'utilisateur à Top. Cela fonctionne:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     TableLayoutPanel tlp1 = new TableLayoutPanel(); 
     this.Controls.Add(tlp1); 
     tlp1.Dock = DockStyle.Fill; 

     for (int i = 0; i < 5; i++) 
     { 
      UserControl1 uc = new UserControl1(); 
      uc.Dock = DockStyle.Top; 
      tlp1.Controls.Add(uc); 
     } 
    } 
} 

UserControl1 dans ce cas était un contrôle utilisateur avec un FLP sur ce qui avait un tas de boutons dans ce que je puisse confirmer que l'accueil et fluide fonctionnerait.