質問

私は、.NET 2.0でアプリケーションを書いていると私はリサイズから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()呼び出す必要はありません)ので、私は、ラベルの自動高さを作ることができる方法はありますか?おかげます。

役に立ちましたか?

解決

あなたはすべてのコントロールにドック= DockStyle.Topを設定するか、またはあなたは(私はOpenNetCF.comからいずれかを使用)OwnerDrawするリストボックスを使用することができます。それはあなたが表示する必要がどのように多くの項目に依存します。私はあなたがアイテムをたくさん持っていますが、パネルのアプローチを開発する方が簡単ですときOwnerDrawするリストボックスを使用して高速であることを見出した。

ワンノート:作業が完了したときに、あなたのコントロールを追加する前にSuspendLayoutを呼び出し、ResumeLayout

他のヒント

これはあなたの実際のコードである場合は、

、それは全く流れていません。これは、WPFのStackPanelを実装し、あなたはすべてのコントロールのためにDock=DockStyle.Topを設定することで同じ効果を得ることができます。ドックはCFで提供されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top