代码之家  ›  专栏  ›  技术社区  ›  Jess

CF.NET中的FlowLayoutPanel

  •  0
  • Jess  · 技术社区  · 15 年前

    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();

    所以我想我有两个问题。这是可行的,但是有没有更好的方法来做到这一点(尤其是这样我就不用打电话了) Layout() 每次)有没有办法让标签自动调整高度?谢谢

    2 回复  |  直到 15 年前
        1
  •  2
  •   Chris Brandsma    15 年前

    您可以在所有控件上设置Dock=DockStyle.Top,也可以使用OwnerDraw列表框(我使用OpenNetCF.com中的列表框)。这取决于您必须显示多少项。我发现,当您有很多项目时,使用OwnerDraw列表框会更快,但是面板方法更容易开发。

        2
  •  1
  •   Henk Holterman    15 年前

    如果这是您的实际代码,那么它根本就不会流动。它实现了一个WPF stackPanel,您可以通过设置 Dock=DockStyle.Top 对于所有控件。码头在CF中可用。