0

.NET 2.0 でアプリケーションを作成しておりFlowLayoutPanel、WinForms の機能が必要です。これは私が思いついたコードで、現在使用しています(ほとんどがラベル付き):

/// <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()それは機能しますが、これを行うためのより良い方法はありますか (特に、毎回呼び出す必要はありません)、ラベルを自動高さにする方法はありますか? ありがとう。

4

2 に答える 2

2

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

1 つの注意: コントロールを追加する前に SuspendLayout を呼び出し、完了したら ResumeLayout を呼び出します。

于 2009-08-14T22:25:52.633 に答える
1

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

于 2009-08-14T22:10:35.550 に答える