【问题标题】:Placement of labels in a panel winforms在面板中放置标签 winforms
【发布时间】:2012-12-19 21:07:26
【问题描述】:

我在 winforms 应用程序中有一个面板,我想在其中以垂直对齐方式显示一些数据。我将从 XML 文档中获取该数据。我将像这样遍历 XML:

for (int i = 0; i < node.ChildNodes.Count; i++)
{
    lbl = new Label();
    lbl.Text = node.ChildNodes[i].Name + " = " + node.ChildNodes[i].InnerText;
    panel1.Controls.Add(lbl);
}

最后我只能看到第一条记录显示在面板的左上角,但是循环通过panel1.controls,我可以看到计数是79,我只需要正确定位它们。

我怎样才能做到这一点?

【问题讨论】:

  • 这非常浪费资源。使用列表框。

标签: c# winforms visual-studio-2010 panel


【解决方案1】:

您可以改用FlowLayoutPanel 并将其FlowDirection 属性设置为TopDown

【讨论】:

    【解决方案2】:
    • 使用FlowLayoutPanel 代替它。

    • FlowDirection属性设置为TopDown

    【讨论】:

    • 我试过了,但我每行有两个标签,我想要每行一个标签。知道我该如何解决吗?谢谢
    • @Laziale 然后使用有两列的TableLayoutPanel。此外,这也是您应该在问题中包含的内容。
    【解决方案3】:

    您只需要设置标签对象的顶部和/或左侧属性。

    for (int i = 0; i < node.ChildNodes.Count; i++)
                {
    
                    lbl = new Label();
                    lbl.Text = node.ChildNodes[i].Name + " = " + node.ChildNodes[i].InnerText;
                    lbl.top = 15 * i;
                    panel1.Controls.Add(lbl);
    }
    

    【讨论】:

    • 手动设置所有东西的位置会很麻烦。您应该使用专门设计用于布置此类控件的面板。更少的工作,更易于维护,并创建更好的输出(即,当表单调整大小或您想在顶部标签上方添加其他内容时会发生什么?)。
    • 视情况而定。我看到了关于面板的答案,但是这个有更多的灵活性。做同一件事的不同方法!
    • 可能偶尔会出现一些极端情况,需要专门设置每个控件的位置,但通常应该像瘟疫一样避免它。在精心设计且灵活的应用程序中,表单上的任何控件或非常少的控件都应具有绝对位置。绝对定位导致无法调整大小、没有可移动组件或动态调整大小的内容的表单。这对于大多数应用程序来说是不现实的。在这种情况下更新绝对位置实际上是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    相关资源
    最近更新 更多