首页 文章

WinForms中的右对齐标签

提问于
浏览
40

在WinForms中右对齐 Label 的最明显的方法是不使用左坐标而不是右坐标(有人可能认为这是一个错误) .

出于这个原因,我总是使用全宽 TableLayoutPanel 用于右对齐标签 . 然而,根据所讨论的布局,这并不总是非常方便...

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

9 回答

  • 1

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

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

  • 7

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

  • 8

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

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

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

  • 0

    这是在标准表格上对我有用的东西

    • 将AutoSize属性设置为关闭,仅使标签右对齐

    • 使用“布局”工具栏使所有字段的大小相同(可能并非真正需要)

    • 多选标签并使用“布局”工具栏右对齐它们,将位置放在所需位置

    • 将TextAlign属性设置为xxxRight设置之一,例如TopRight

  • 50

    那么Sphax注意到你必须:

    • AutoSize 设为false

    • TextAlign 设置为右,例如 MiddleRight

    • 使用 MeasureString 将标签大小调整为实际大小

    码:

    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;    
    }
    
  • 9

    如果你设置表单属性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;
    
  • 0

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

    • 将AutoSize属性标签设置为false . 设置TextAlign

    • 属性标签右侧的东西 .

    • 逐个手动调整标签大小,以便它们可以占用更多空间 .

  • 0

    将事件处理程序附加到标签的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的RH侧 .

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

  • 0
    • 动态创建标签的默认自动调整大小为false .

    • 如果label的autosize为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);
    

相关问题