0

我有点卡在这里。我正在尝试动态添加带有两个标签的面板。

第一个标签必须自动调整大小,第二个标签应位于第一个标签的左侧,第一个标签具有固定的最大宽度并且也自动调整大小。我的代码如下

        pnlSearchResults.SuspendLayout(); 

        Panel pnlRow = new Panel
        {
            AutoSize = true,
            BorderStyle = BorderStyle.FixedSingle,
            Padding = new Padding(0),
            Margin = new Padding(0),
            Top = 0,
            Left = 0,
            Width = pnlSearchResults.Width - 30,
            MaximumSize = new Size(pnlSearchResults.Width - 30, 0)
        };

        Label lblKey = new Label
        {
            Name = string.Format("lblKey{0}", 1),
            Text = "My label goes here",
            AutoSize = true,
            TextAlign = ContentAlignment.MiddleLeft,
            BorderStyle = BorderStyle.FixedSingle,
            Padding = new Padding(0),
            Margin = new Padding(0),
            Top = 0,
            Left = 0,
        };

        pnlRow.Controls.Add(lblKey);

        Label lblValue = new Label
        {
            Name = string.Format("lblValue{0}", 1),
            Text = "And my long text goes here... and it goes on and on and on and on and on and on and on and on and on and on and ...",
            AutoSize = true,
            Height = 27,
            TextAlign = ContentAlignment.MiddleLeft,
            BorderStyle = BorderStyle.FixedSingle,
            Padding = new Padding(0),
            Margin = new Padding(0),
            Top = 0,
            MaximumSize = new Size(pnlRow.Width - lblKey.Width - 10, 0),
            Left = lblKey.PreferredWidth
        };
        pnlRow.Controls.Add(lblValue);
        pnlSearchResults.Controls.Add(pnlRow);
        pnlSearchResults.ResumeLayout();
        pnlSearchResults.PerformLayout();

我读到调用挂起、恢复或执行方法可以提高性能。这就是我得到的。

在此处输入图像描述

如您所见,第二个标签没有与第一个标签正确对齐。如果我为第一个标签设置 autosize = false,它工作正常,但我希望我的第一个标签自动调整大小。

我不确定我在这里缺少什么,请以正确的方式指导我。

4

1 回答 1

0

发生这种情况是因为尚未绘制标签,因此将其自身调整为正确的大小。如果你想让它工作,你不能暂停和恢复布局,你不能在表单显示之前放置控件,你可能需要在放置标签之间调用 Refresh 以允许第一个标签正确自动调整大小。

于 2013-11-12T18:30:37.277 回答