2009-08-14 3 views
0

私は.NET 2.0でアプリケーションを作成していますが、私はWinFormsからFlowLayoutPanelの機能が必要です。CF.NETのFlowLayoutPanel

/// <summary> 
/// Flowable layout panel 
/// </summary> 
public partial class FlowLayoutPanel : Panel 
{ 
    public FlowLayoutPanel() 
    { 
     InitializeComponent(); 
    } 

    /// <summary> 
    /// Flow the layout of the panel. Required before presentation. 
    /// </summary> 
    public void Layout() 
    { 
     int top = 0; 

     // Set control position 
     foreach (Control ctrl in this.Controls) 
     { 
      ctrl.Top = top; 
      // Account for the scrollbar 
      ctrl.Width = this.Width - 17; 

      top += ctrl.Height; 
     } 
    } 
}

パネルは(私の場合は、動的に生成されたタブページ)フォームに追加され、その後、私は追加します。これは私が(ほとんどのラベル付き)今使っている私はそれを思い付いたコードです次のようなフォームのコードビューのコントロール:

panel.Controls.Add(new Label() { Text = "Item name", Font = boldTahoma }); 
panel.Controls.Add(new Label() { Text = item.ItemName }); 
panel.Controls.Add(new Label() { Text = "Category", Font = boldTahoma }); 
panel.Controls.Add(new Label() { Text = item.Category }); 
panel.Controls.Add(new Label() { Text = "Quantity", Font = boldTahoma }); 
panel.Controls.Add(new Label() { Text = item.Quantity }); 

panel.Layout();

私は2つの質問があると思います。それは動作しますが、これを行うには良い方法があります(特に、毎回Layout()に電話する必要はありません)。そうすれば、ラベルを自動高さにすることができますか?ありがとう。

答えて

2

すべてのコントロールでDock = DockStyle.Topを設定することも、OwnerDrawリストボックスを使用することもできます(私はOpenNetCF.comのものを使用します)。表示するアイテムの数によって異なります。 OwnerDraw ListBoxを使用するとアイテムがたくさんある場合の方が高速ですが、Panelのアプローチは簡単に開発できることがわかりました。

メモ:コントロールを追加する前にSuspendLayoutを呼び出し、完了したらResumeLayoutを呼び出します。

1

これが実際のコードの場合は、まったくフローティングではありません。これはWPFのstackPanelを実装しており、すべてのコントロールに対してDock=DockStyle.Topを設定することで同じ効果を得ることができます。 DockはCFで利用可能です。

関連する問題