WinForms中的右对齐标签

时间:2009-11-07 08:05:10

标签: .net winforms label

在WinForms中右对齐Label的最明显方法不起作用:将anchor设置为Top / Bottom Right,TextAlign设置为TopRight。如果文本改变了标签的左坐标保持不变而不是右坐标(人们可能认为这是一个错误)。

出于这个原因,我总是使用全宽TableLayoutPanel作为右对齐标签。然而,这并不总是非常方便,具体取决于所讨论的布局......

所以,我想知道是否还有其他方法可以让我在WinForms中保持一个从未发生过对齐的标签?

9 个答案:

答案 0 :(得分:50)

一个简单的选项是禁用AutoSize(设置为false)并使其超大,以便有空余空间。

或者,也许使用Dock而不是Anchor,虽然这有不同的含义,因此您可能需要将其放在Panel或类似的内容中。最终,这就像第一个一样 - 首先是过度调整它;所以也许第一种选择更简单。

答案 1 :(得分:9)

使用带有停靠标签的TableLayoutPanel是我在Winforms中放置右对齐标签时唯一可靠的方法。关闭AutoSize并使用超大标签似乎会导致高DPI用户出现奇怪的异常。

答案 2 :(得分:8)

使用FlowLayoutPanel可以很好地完成它。

flowLayoutPanel.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft;
flowLayoutPanel2.Controls.Add(label);

然后,只需确保flowLayoutPanel足够大,以便标签扩展。

答案 3 :(得分:7)

这是在标准表格上对我有用的内容

  • 关闭AutoSize属性,仅使标签右对齐
  • 使用“布局”工具栏
  • 使所有字段的大小相同(可能并非真正需要)
  • 多选标签并使用“布局”工具栏右对齐它们,所需位置
  • 将TextAlign属性设置为其中一个xxxRight设置,例如TopRight

答案 4 :(得分:1)

Sphax注意到你必须:

  1. AutoSize设为false
  2. TextAlign设置为右,例如设置为MiddleRight
  3. 使用MeasureString
  4. 将标签大小调整为实际尺寸

    代码:

    label.AutoSize = false; 
    label.TextAlign = ContentAlignment.MiddleRight;    
    
    int yourWidthHere = 100;    
    using (Graphics g = label.CreateGraphics())    
    {    
         SizeF size = g.MeasureString(text, label.Font, yourWidthHere);    
         label.Height = (int)Math.Ceiling(size.Height);    
         label.Text = text;    
    }   
    

答案 5 :(得分:0)

如果你设置表格属性RightToLeft = yes; 所以你不应该使用Text Align属性来设置Anchor。 尝试这种方法:

Form.righttoleft = yes;
label.anchor = Top, Right;
label.TextAlign = TopLeft;

Form.righttoleft = No;
label.anchor = Top, Right;
label.TextAlign = TopRight;

Form.righttoleft = yes;
label.righttoleft = No;
label.anchor = Top, Right;
label.TextAlign = TopRight;

答案 6 :(得分:0)

对我来说最好的解决方案是:

  1. 将AutoSize属性标签设置为false。设置TextAlign
  2. 右侧的属性标签。
  3. 手动调整大小 标签1比1,以便他们可以使用更多空间。

答案 7 :(得分:0)

将事件处理程序附加到标签&​​#39; SizeChanged事件:

private void label1_SizeChanged(object sender, EventArgs e)
{
    label1.Location = new Point(Your_Anchor_Point - label1.Width, label1.Location.Y);
}

为了更加符合DPI,请考虑使用其他控件作为锚点,即

label1.Location = new Point(dataGridView1.Location.X + dataGridView1.Width - label1.Width, label1.Location.Y);

与dgv的右侧对齐。

(顺便说一句:我尝试过Paint& TextChanged事件,但他们似乎有时会感到困惑 - 可能与事件顺序有关,特别是在打开新表格时。)

答案 8 :(得分:0)

  • 动态创建标签的默认自动调整大小为false。
  • 如果标签的自动调整大小为假。它包含额外的空白空间。
  • 欺骗你认为它没有正确对齐。诊断它, 将标签的backColour设置为lightgreen

enter image description here

 int rowIndex=1;

 var lbx = new Label();
 lbx.AutoSize = true;          // default is false.
 lbx.BackColor = Color.Green;  // to see if it's aligning or not
 lbx.Text = "Iam  Autosize=true";
 lbx.Anchor = AnchorStyles.Right;
 tlPanel.Controls.Add(lbx, 0, rowIndex);

 var dtp = new DateTimePicker();
 dtp.Anchor = AnchorStyles.Left;
 tlPanel.Controls.Add(dtp, 1, rowIndex);


  //--- row 2  autosize false
 rowIndex=2;
  var lbx2 = new Label();
 lbx2.AutoSize = false;          // default is false.
 lbx2.BackColor = Color.Green;  // to see if it's aligning or not
 lbx2.Text = "AutoSz=false";
 lbx2.Anchor = AnchorStyles.Right;
 tlPanel.Controls.Add(lbx2, 0, rowIndex);

 var dtp = new DateTimePicker();
 dtp.Anchor = AnchorStyles.Left;
 tlPanel.Controls.Add(dtp, 1, rowIndex);