为什么我动态创建的标签无法按要求对齐

本文关键字:对齐 标签 动态 创建 为什么 | 更新日期: 2023-09-27 17:59:28

当我将标签的ContentAlignment属性设置为MiddleRight时,我希望它在放置标签的面板内向右对齐。相反,它顽固地保持在左对齐的位置。为什么会这样,我该如何修复?这是我的代码:

private void CreateNewLabel(int YPos, string DisplayStr, ContentAlignment contentAlign,
                            int FontSize)
{
    Label lbl = new Label();
    //lbl.Left = DEFAULT_XPOS;
    lbl.Font = new Font(lbl.Font.Name, FontSize, lbl.Font.Style);
    lbl.Top = YPos;
    lbl.Text = DisplayStr;
    lbl.TextAlign = contentAlign;
    lbl.AutoSize = true;
    panelFauxLabel.Controls.Add(lbl);
}

除水平放置外,所有东西都在工作。我不想设置Left属性,因为我希望某些路线占用所有"右侧"空间;计算XPos是可能的,我确信,但也相当复杂,我更确信。

更新

奥利维尔的回答很好。现在的代码是:

    private void CreateNewLabel(int YPos, string DisplayStr, ContentAlignment contentAlign, int FontSize)
    {
        Label lbl = new Label();
        lbl.Left = DEFAULT_XPOS;
        lbl.Font = new Font(lbl.Font.Name, FontSize, lbl.Font.Style);
        lbl.Top = YPos;
        lbl.Text = DisplayStr;
        lbl.TextAlign = contentAlign;
        if (contentAlign.Equals(ContentAlignment.MiddleRight))
        {
            lbl.Anchor = AnchorStyles.Right;
        }
        else // there is no AnchorStyles.Center or AnchorStyles.Middle
        {
            lbl.Anchor = AnchorStyles.Left;
        }
        lbl.AutoSize = false;
        lbl.Width = panelFauxLabel.Width;
        panelFauxLabel.Controls.Add(lbl);
    }

更新2

我不得不对标签的高度进行调整,以防止大字体在膝盖处被剪掉,可以说:

    // This factor was just a guess, but it seems to work pretty well
    double down = Math.Round(FontSize*1.5);
    lbl.Height = Convert.ToInt32(down);

为什么我动态创建的标签无法按要求对齐

TextAlign对齐标签内的文本,而不是面板内的标签。考虑使用Anchor属性将标签与面板的右边缘对齐。


更新

这是如何做到的:使标签与面板的宽度相同,将标签固定在的顶部、左侧和右侧

lbl.TextAlign = contentAlign;
lbl.AutoSize = false;
lbl.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
lbl.Top = YPos;
lbl.Left = 0;
lbl.Width = panelFauxLabel.ClientSize.Width; // ClientSize takes account of scroll
                                             // bars, borders and padding.
panelFauxLabel.Controls.Add(lbl);

现在,标签与面板一起调整大小,并且文本在标签内正确对齐。将lbl.AutoSize设置为false,以使标签大小与文本长度无关。