Right-aligned labels in WinForms

后端 未结 9 1448
甜味超标
甜味超标 2021-01-07 15:59

The most obvious way to right-align a Label in WinForms doesn\'t work: setting anchor to Top/Bottom Right and TextAlign to TopRight. If the text changes the lab

相关标签:
9条回答
  • 2021-01-07 16:27

    Attach an event handler to the labels' SizeChanged event:

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

    To be more DPI friendly consider using some other control as the anchor point, i.e.

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

    to align to the RH side of the dgv.

    (BTW: I tried the Paint & TextChanged events but they seemed to sometimes get confused - probably something to do with event order particularly on opening a new form.)

    0 讨论(0)
  • 2021-01-07 16:28

    The best solution for me was:

    1. Set the AutoSize property labels to false. Set the TextAlign
    2. property labels to something on the right.
    3. Resize manually the labels 1 by 1 so they can use more space.
    0 讨论(0)
  • 2021-01-07 16:31

    Here's what worked for me on a standard form

    • Set AutoSize property off for just the Labels to be right aligned
    • Make all the fields the same size (perhaps this isn't really required) using the Layout toolbar
    • Multi-select the labels and right align them using the Layout toolbar, position where desired
    • Set TextAlign property to one of the xxxRight settings, e.g, TopRight
    0 讨论(0)
  • 2021-01-07 16:35

    Using a TableLayoutPanel with docked labels is the only reliable method that I've found for placing right-aligned labels in Winforms. Turning off AutoSize and using oversized labels seems to cause strange anomalies for High DPI users.

    0 讨论(0)
  • 2021-01-07 16:39

    One simple option is to disable AutoSize (set to false) and over-size it so there is spare space.

    Alternatively, perhaps use Dock instead of just Anchor, although this has a different meaning, so you may need to put it in a Panel or similar). Ultimately this works like the first - by over-sizing it in the first place; so perhaps the first option is simpler.

    0 讨论(0)
  • 2021-01-07 16:46
    • dynamically created label's default autosize is false.
    • if label's autosize is false. it contains extra empty space.
    • that tricks you to think its doesnt right align properly. to diagnose it, set the label's backColour to lightgreen

     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);
    
    0 讨论(0)
提交回复
热议问题