/ / FlowLayoutPanel в CF.NET - c #, компактна рамка, керування користувачами, flowlayoutpanel

FlowLayoutPanel у CF.NET - c #, компактна структура, елементи керування користувачами, flowlayoutpanel

Я пишу заявку в .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();

Тож я маю два запитання. Це працює, але чи є кращий спосіб зробити це (тим більше, що мені не потрібно дзвонити Layout() щоразу) і чи є спосіб, щоб я міг зробити ярлики з автоматичною висотою? Дякую.

Відповіді:

2 для відповіді № 1

Ви можете встановити Dock = DockStyle.Нагорі над усіма вашими елементами управління, або ви можете скористатися списком OwnerDraw (я використовую цей з OpenNetCF.com). Це залежить від того, скільки предметів потрібно відобразити. Я виявив, що використання OwnerDraw ListBox швидше, коли у вас є багато елементів, але підхід до панелі простіше розробити.

Одна примітка: зателефонуйте SuspendLayout перед тим, як додати свої елементи керування, і ResumeLayout, коли закінчите.


1 для відповіді № 2

Якщо це ваш фактичний код, то він зовсім не протікає. Він реалізує WPF stackPanel, і ви можете отримати той же ефект, встановивши Dock=DockStyle.Top для всіх елементів управління. Док доступний у CF.