Метка растет справа налево - PullRequest
57 голосов
/ 10 апреля 2011

У меня есть этикетка на форме, которая находится справа от формы.Эта метка загружает динамический текст.

Иногда загружаемый текст является слишком длинным, и текст пересекает границу формы, то есть часть текста выходит из формы.

Я хочу, чтобы метка росла справа налево, а не слева направо.Как мне этого добиться?

Ответы [ 6 ]

71 голосов
/ 16 декабря 2013

Я решил эту проблему, установив метку

AutoSize свойство в false ,

TextAlign в MiddleRight ,

и Привязка к вправо .

Обратите внимание, что сам размер метки не увеличивается с текстом, но выможет справиться с этим, предоставив ему достаточно ширины, чтобы соответствовать содержанию.Визуальный эффект тот же.

23 голосов
/ 11 апреля 2011

Моя проблема заключалась в том, что моя метка была в панели, и все, что я делал, не работало.

Я сделал, чтобы поместить метку в элемент управления TableLayoutPanel и установить * 1004 в TableLayoutPanel* свойство до True;это добилось цели.

6 голосов
/ 10 апреля 2011

Вы не можете заставить его «расти справа налево», но вы можете назначить его Left свойство, чтобы оно не выходило из формы:

label1.Text = "some dynamic text here...";
if (label1.Right > this.Width)
    label1.Left = this.Width - label1.Width;

Если дизайнпозволяет, вы также можете удвоить его высоту, чтобы текст занимал две строки.

3 голосов
/ 12 апреля 2013

Вы можете использовать TableLayoutPanel или другой совместимый контейнерный элемент управления, но вместо этого установить свойство RightToLeft для набора контейнеров Dock = "Right" для метки

Установка свойства RightToLeft не всегда дает ожидаемые результаты, поскольку для некоторых форматов строк строка изменяется, изменяя порядок слов.

1 голос
/ 20 ноября 2018
using System.Windows.Forms;

/// <summary>
/// The position of myLabel to the left of the otherControl component when entering 
/// text "s". 
/// You must set myLabel.AutoSize = true
/// </summary>
/// <param name="s">text</param>
void WriteText(string s)
{
    int len = TextRenderer.MeasureText ( s, myLabel.Font ).Width;
    myLabel.Left = otherControl.Left - 5 - len;
    myLabel.Text = s;
}
1 голос
/ 23 декабря 2014

Вы можете написать это:

    public enum Leftorright { left,right}
    private Leftorright _LeftToRight = Leftorright.left;
    public Leftorright LeftToRight
    {
        get { return _LeftToRight; }
        set { _LeftToRight = value; }
    }


    protected override void OnTextChanged(EventArgs e)
    {
        int oldWidth;
        oldWidth = this.Width;
        base.OnTextChanged(e);
        if (LeftToRight == Leftorright.right && this.Width != oldWidth)
        {
            this.Left = this.Left - this.Width + oldWidth;
        }
    }
...