CF.NETでFlowLayoutPanel
-
16-09-2019 - |
質問
私は、.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で提供されます。
所属していません StackOverflow