C# 为什么动态创建的标签无法按预期对齐?
当我将标签的ContentAlignment属性设置为MiddleRight时,我希望它在我放置它的面板中向右对齐。相反,它顽固地保持左对齐。为什么会这样?我该如何修复它?这是我的密码:C# 为什么动态创建的标签无法按预期对齐?,c#,label,panel,C#,Label,Panel,当我将标签的ContentAlignment属性设置为MiddleRight时,我希望它在我放置它的面板中向右对齐。相反,它顽固地保持左对齐。为什么会这样?我该如何修复它?这是我的密码: private void CreateNewLabel(int YPos, string DisplayStr, ContentAlignment contentAlign, int FontSize) { Label lbl = new Labe
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属性,因为我希望某些路线可以占据所有“右侧”空间;我敢肯定,计算XPO是可能的,但我更敢肯定,它也相当复杂
更新
奥利弗的回答很有效。代码现在是:
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
对齐标签内的文本,而不是面板内的标签。考虑使用<代码>锚点<代码>属性,以便将标签对齐到面板的右边缘。
更新 下面是如何做到这一点:使标签与面板宽度相同,将标签固定在顶部、左侧和右侧
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
,以使标签大小独立于文本长度。我添加了一个具体示例。