mathinvalidnik
mathinvalidnik

Reputation: 1600

How to position a Label horizontally in Windows Forms code-behind

I have a Windows form that I want to manipulate from code-behind.In other words:

I can do stuff like this:

myForm.TheLableThatIWantToPosition.Text = "Some text!";

myForm.TheLableThatIWantToPosition.ForeColor = Color.Red;

etc. 

But, how can I position it horizotnally ? I want to center it horizontally.

I tried with the:

myForm.TheLableThatIWantToPosition.TextAlign = ContentAlignment.MiddleCenter;

and all the other options but it just doesn't happen.

Upvotes: 0

Views: 6957

Answers (2)

King King
King King

Reputation: 63317

You can place this code in a SizeChanged event handler of your label1.Parent:

if(label1.Parent != null){ //this if check may be removed if it's sure that Parent is not null
 label1.Left = (label1.Parent.Width - label1.Width)/2;
}

Better you should do something like this:

//SizeChanged event handler for your label1
private void label1_SizeChanged(object sender, EventArgs e){
   label1.Left = (label1.Parent.Width - label1.Width)/2;
}
//SizeChanged event handler for your label1's Parent
private void parent_SizeChanged(object sender, EventArgs e){
   label1.Left = (label1.Parent.Width - label1.Width)/2;
}
//you can change label1.Parent with a control reference which you know it's the container of your label1.

To make it dynamically, for example you have a class CustomLabel and you want it to be centered by default whenever it's placed/added to another container:

public class CustomLabel : Label {
  public CustomLabel(){
     IsCentered = true;
  }
  private Control oldParent;
  public bool IsCentered {get;set;}//You can define an Enum if needed
  protected override void OnSizeChanged(EventArgs e){
    if(Parent != null&&IsCentered){
       Center();
    }
  }
  protected override void OnParentChanged(EventArgs e){
     if(Parent != null){
        if(oldParent != null) oldParent.SizedChanged -= parent_SizeChanged;
        Parent.SizedChanged -= parent_SizeChanged;
        Parent.SizedChanged += parent_SizeChanged;
        Center();
     }
     oldParent = Parent;
  }
  private void parent_SizeChanged(object sender, EventArgs e){
    if(IsCentered) Center();
  }
  public void Center(){
    Left = (Parent.Width - Width)/2;
  }
}

Upvotes: 1

A G
A G

Reputation: 22569

If you want to center align content in label -

AutoSize = false;
TextAlign = MiddleCenter;

Upvotes: 2

Related Questions