2010-03-25 51 views
1

我有一個FlowLayoutPanel的與性能:嵌套的FlowLayout面板不換

  • 碼頭=填充(在用戶控件)
  • 的FlowDirection =自上而下
  • WrapContents =假

我這樣做,以便每個添加到面板的項目都被添加到底部。

我添加到此面板的項目是usercontrols,它們本身具有FlowLayoutPanels,但它們具有標準行爲(LeftToRight,WrapContents = true)。我遇到的問題是內部用戶控件的FlowLayoutPanel沒有調整大小以填充外部控件,但是當我在這些控件上將自動調整大小設置爲true時,面板將不會包裹它的內容 - 這顯然是一個已知問題。

如果它有助於直觀什麼,我試圖做的,它看起來像這樣:

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

回答

0

我不認爲你可以停靠控件在FlowLayoutPanel的,除非你繼承LayoutEngine,使自己的版本使用您的自定義引擎的窗格。但是,這個問題有一個很棒的解決方案。使用TableLayoutPanel!由於您只需要1列,所以爲此使用TableLayoutPanel非常簡單。

唯一需要注意的是,TLP最初需要有0行,然後以編程方式添加用戶控件。訣竅是將用戶控件停靠在Top上。這工作:

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在這種情況下是上有一個FLP其中有一堆按鈕,在它的用戶控件,所以我可以確認的是,對接和流動會工作。