Установите WordWrap = false для метки - PullRequest
4 голосов
/ 13 апреля 2010

Как мне установить WordWrap = false на System.Windows.Forms.Label?

У меня есть заголовок на панели, и он должен показывать "MyPanel capt...". Поэтому я использую AutoEllipsis = true, но этого недостаточно.

Я также использую "AutoSize = true", потому что хочу, чтобы метка занимала минимально возможное пространство.

Кстати, Visual Basic 6.0 сделал это.

Ответы [ 7 ]

5 голосов
/ 13 апреля 2010

У меня похожий эффект при использовании:

label1.AutoSize = false;
label1.AutoEllipsis = true;

и размер области метки должен быть только на одну строку по высоте.

1 голос
/ 13 апреля 2010

Попробуйте установить метки MaximumSize Property.

1 голос
/ 13 апреля 2010

Я нашел решение:

this.label.AutoEllipsis = true;
this.label.AutoSize = true;

В обработчике события на панели для Resize:

...
textHeight = this.label.Font.SizeInPoints; // Take in pixels, not points
...
Size newMaxSize = new Size(this.Width,
    textHeight + label.Padding.Top + label.Padding.Bottom);
this.label.MaximumSize = newMaxSize;
...
1 голос
/ 13 апреля 2010

Я уверен, что вы не можете предотвратить наклеивание этикеток. Альтернативный (если немного грубый) вариант - установить для метки авторазмер (так, чтобы ширина росла вместе с текстом), а затем поместить элемент управления рядом с ним в z-порядке перед ним. Таким образом, когда ширина метки превышает определенную точку, содержимое перекрытия метки будет скрыто этим другим элементом управления.

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

Кроме того, если вы пытаетесь использовать AutoEllipsis, я предполагаю, что вы отключили AutoResize? Я считаю, что это имеет приоритет.

0 голосов
/ 15 октября 2015

Я использую FlowLayoutPanel для удержания меток слева направо. Так что авторазмер и перекрытие разбивают мои красиво выровненные столбцы. Я думаю, что самый прямой способ - это просто нарисовать себя. Существуют помощники, которые сделают для вас многоточие.

Этот последний TextFormatFlags имеет дюжину опций, которые экономят вам массу надоедливого кода для рисования.

    private void templateLabel_Paint(object sender, PaintEventArgs e)
    {
        Label lbl = sender as Label;
        e.Graphics.Clear(lbl.BackColor);

        TextRenderer.DrawText(e.Graphics, lbl.Text, lbl.Font,
            lbl.ClientRectangle,
            Color.Black,
            lbl.BackColor, TextFormatFlags.EndEllipsis);
    }
0 голосов
/ 13 апреля 2010

Ах, я думаю, я наконец понял, какой эффект вы хотите.

Требуется метка, которая будет автоматически увеличиваться до максимального размера. После максимума, вы хотите показать AutoEllipsis. Правильно?

Если это так, то вам нужно установить свойства MaximumSize, AutoEllipsis и AutoSize. Тогда ярлык будет как можно меньше. Когда размер текста превысит указанный вами максимальный размер, текст будет обрезан и добавлен многоточие. Вам не нужен код для этого.

0 голосов
/ 13 апреля 2010

Я не думаю, что есть какой-либо способ сделать это - ярлыки не являются одно- или многострочными, как таковые. Это зависит только от того, есть ли у свойства Text метки разрывы строк.

Если вы хотите, чтобы это была одна строка, замените символы CRLF в Text на что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...