C# Form text-align not working - c#

i have created this label in design.
label TextAlign = MiddleCenter;
label AutoSize = false;
it looks fine in design but when i run it always align Left. No idea what is going on!
// load user image
picCerImage.Image = Image.FromFile(Global.avatarPath);
// load user fullname;
lbeCerFullName.Text = Global.userFullName;
this code is from FormLoad event and here is a picture when i run:
Sorry about my English!

I think this will work on that:
set the TextAlign to TopRight
set the Anchor to top and left.

OK! I found the problem with help of Martheen. Trim the string before loading it! :)

You can always look for other answers to problems like yours, like, for example, in How do I align my text in a label to the right side?.
Anyway, maybe this will work:
Adjust the label size so it's larger than the text.
Set the label Autosize property to False
Set the label TextAlign to TopRight, MiddleRight or BottomRight, depending on your choice.
I hope this works for you. Good luck!

Related

Aligning text of TextBox in c# Right and Bottom

I'm making a calculator in c#. I know the logic required to make a calculator. But the problem I'm facing is with the UI, I want to make the text in my TextBox Right and Bottom, while there is TextAlign property which makes the text in the TextBox align to right, I'm having trouble making it align to the bottom?.I really tried finding an answer.
but I want something like this
Also how to move the text in the textbox slightly upper when I press any operator?
Assuming the fact that you only use the TextBox for displaying the user input, a Label will allow for better use of what you want.
The Label supports a wider use of TextAlign so you could use
Label1.TextAlign = ContentAlignment.BottomRight;
If you want to create multiple lines inside the label, you can use Environment.NewLine to achieve that for example. But a StringBuilder and using AppendLine will probably work too.
If you really need to use a TextBox to achieve your needs, your best option would probably be to write a custom TextBox which supports your wanted text align.
Think this is possible with a RichTextBox but it would be a long work around. I would suggest using a Label. To align the text to the bottom right in a label you can use:
label.TextAlign = ContentAlignment.BottomRight;
To change the look of the Label you can use:
label.BackColor = Color.White;
label.BorderStyle = BorderStyle.FixedSingle;
To change the label from looking like a single line:
label.AutoSize = false;
label.Size = new Size(100,100)

How do I align my text in a label to the right side?

So here is my file label. If the label is too long, it will go off the screen thus making me have to scroll.
I've tried the following properties (separate times):
RightToLeft as Yes
ContentAlignment as BottomRight or TopRight
However, none of them are working. What is the correct property?
Try setting AutoSize to false (that makes a fixed size box). Then you can use the TextAlign property to align the text - e.g. use MiddleRight. That should do the trick.
Label label = new Label();
label.AutoSize = false;
label.TextAlign = ContentAlignment.MiddleRight;
In the properties window:
Set AutoSize = False
Set TextAlign = MiddleRight
In the designer:
Resize the label so it's wide enough to fit whatever potential text you try to set it to.
Just Remove the autosize = true and set RightToLeft = true
and the label will now grow to the left.
Yes AutoSize = false and RightToLeft = true will work. Note that when you set RightToLeft, the strange c# 2010 TextAlign TopLeft becomes aligned correctly to the right. If I set that to Top/Middle Right, the text jumps to the left instead!
Sample (WPF):
Label label = new Label();
label.HorizontalContentAlignment = HorizontalAlignment.Right;
This worked for me:
your_label_name.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
Set Autosize=true and Textalign=MiddleRight.
All you have to do to label to make it work:
Textalign = MiddleRight
Anchor = top and right

How can I increase height of a textbox without Multiline = "true" or incrementing font size?

I need to adjust height of the textbox so it is suitable for touchscreen.
I understand people recommend Multiline = "true" but if I do that, text inside of the box is justified with top which is not proper in my application.
I tried to adjust font size, but the size should be ridiculously huge to fit the height for my need.
Is there any other way to increase the height of textbox?
Try this:
textBox1.AutoSize = false;
It won't show up in the intellisense, but it will work.
To have it work with the designer, you would have to make your own TextBox:
public class TextBoxEx : TextBox {
public TextBoxEx() {
this.AutoSize = false;
}
}
Trick steps:
Set the multi-line = true
No need to change the Font size.
change the Max-length . so that it should not enter the next line.
For what I wanted to do using a label instead with BorderStyle=Fixed3D and AutoSize=False did the trick.

How to resize a button depending on its text

In the process of translating an application with C# + Winforms, I need to change a button's text depending on the language.
My problem is the following :
Let's say I want to translate a button from "Hi all!" to "Bonjour tout le monde" !
As you can guess, the button's size won't be the same if I enter english text or french one... My question is "simple", how can I manage to resize the button on the fly so the text fits its content in the button ?
So far I got something like that !
[Hi all!]
[Bonjour]
There's absolutely no need to use the underlying Graphics object as the other posters have said.
If you set the button's AutoSize property to true, the AutoSizeMode to GrowAndShrink, and the AutoEllipsis to false, it will resize automatically to fit the text.
That being said, you may need to make several layout adjustments to make this change fit into your UI. You can adjust the button's padding to add space around the text, and you may want to place your buttons in a TableLayoutPanel (or something) to stop them from overlapping when they resize.
Edit:
#mastro pointed out that: AutoEllipsis is only valid when AutoSize is false (As explained in the documentation), so it can be safely ignored as long as the other three properties are set correctly.
Your best bet is to set the AutoSize property as described ach's answer
However if AutoSize isn't working for you, resizing the button in code is easy enough. You can just need to set the button's width. The trick is making it big enough to fit your text.
using(Graphics cg = this.CreateGraphics())
{
SizeF size = cg.MeasureString("Please excuse my dear aunt sally",this.button1.Font);
// size.Width+= 3; //add some padding .net v1.1 and 1.0 only
this.button1.Padding = 3;
this.button1.Width = (int)size.Width;
this.button1.Text = "Please excuse my dear aunt sally";
}
Try this:
Button.AutoSize = true;
Button.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly;
Button.TextAlign = ContentAlignment.MiddleLeft;
Button.Padding = new Padding(0, 0, 0, 0);
To enable a Button in WinForms grow and/or shrink depending on the size of the Text, you need to set the button's AutoSize property to True and the AutoSizeMode property to GrowAndShrink.
// C#
btn.AutoSize = true;
btn.AutoSizeMode = AutoSizeMode.GrowAndShrink;
' VB.NET
btn.AutoSize = True
btn.AutoSizeMode = AutoSizeMode.GrowAndShrink
Please note that the AutoSize property will only allow the button's size to grow if the AutoSizeMode property is set to GrowOnly; by changing the AutoSizeMode property to GrowAndShrink, the button will now automatically extend or reduce in width and height based on its Text property.
Also note that in setting the two properties as shown above, you can make use of new lines (Environment.NewLine or vbCrLf) in the Text property and the button will scale down as needed.
As Andrew Hanlon explains, you can set AutoSize = true.
When doing so, you can also attain a perfect layout of the buttons automatically by placing them on a FlowLayoutPanel.
The horizontal distance between them will always stay the same when the FlowDirection of the FlowLayoutPanel is LeftToRight or RightToLeft. You can adjust this distance by setting the Margin property of the buttons appropriately. You can create groups of buttons by increasing the left margin of buttons beginning a new group.
If you set the Dock property of the buttons to DockStyle.Fill, they will even grow their width automatically in order to fit to the widest button if the FlowDirection of the FlowLayoutPanel is TopDown or BottomUp.
btn.AutoSizeMode = AutoSizeMode.GrowOnly;
btn.AutoSize = true;
btn.Dock = DockStyle.Fill;
In addition to setting the AutoSize to true and the AutoSizeModeto GrowAndShrink, as suggested in the other answers, you may also need to set the TextImageRelation property, if you have set the button image, so that the text doesn't overlap the image.

C# have end of text priorities

I'm concatenating a string that sometimes is long enough for it not to fit in a label control. How can i make it autoscroll to the rightside so i always see the end of the string?
While I'm sure there are ways of doing, I have to ask, why? I think it would look and/or work very badly and probably confuse the user.
Why not have the text get trimmed with an ellipse (...) at the end and show a tooltip on the label?
using System.Windows.Forms;
var label = new Label();
label.AutoSize = false;
label.AutoEllipsis = true;
label.Text = "This text will be too long to display all together.";
var labelToolTip = new ToolTip();
labelToolTip.SetToolTip(label, label.Text);
Now the tooltip will show the full text when the user hovers over it. Since the text in the label will be truncated and end in an ellipse, the user should know to hover over for more info (usually the standard way).
The TextAlign property allows you to specify the alignment. If you right-justify it with this, the right side of the text will always be visible. However, if you want it to be left or center justified and still have the behavior you describe, I suspect you will need to perform some measurement using Graphics.MeasureString to determine if the text fits and change the alignment dynamically.
AFAIK there's no way to scroll a label. A hack would be to use a TextBox (read-only, turn off border) then use SendKeys.Send() to move the cursor to the end of the text. Something like:
textBox1.Focus();
SendKeys.SendWait("{END}");
To get the text to not show up as selected I had to change it's position in the tab order (so that it wasn't 1) but that may not be a problem in your case.

Categories

Resources