Переход на новую строку для маркировки в Windows Forms

web.py сделал меня счастливым в прошлом. Рассмотрите проверку его.

, Но это действительно кажется, что архитектурная модернизация могла бы быть надлежащим, хотя более дорогой, решением.

179
задан Jim Fell 20 May 2016 в 10:16
поделиться

2 ответа

Быстрый ответ: выключите AutoSize .

Большая проблема здесь в том, что этикетка не изменит свою высоту автоматически (только ширину). Чтобы сделать это правильно, вам необходимо создать подкласс метки и включить логику вертикального изменения размера.

В основном, что вам нужно сделать в OnPaint:

  1. Измерьте высоту текста (Graphics.MeasureString).
  2. Если высота метки не равна высоте текста, задайте высоту и верните.
  3. Нарисуйте текст.

Вам также потребуется установить флаг стиля ResizeRedraw в конструкторе.

155
ответ дан 23 November 2019 в 06:15
поделиться

Из MSDN , Автоматически переносить текст в ярлык :

using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

public class GrowLabel : Label {
    private bool mGrowing;
    public GrowLabel() {
        this.AutoSize = false;
    }
    private void resizeLabel() {
        if (mGrowing) 
            return;
        try {
            mGrowing = true;
            Size sz = new Size(this.Width, Int32.MaxValue);
            sz = TextRenderer.MeasureText(this.Text, this.Font, sz, TextFormatFlags.WordBreak);
            this.Height = sz.Height;
        }
        finally {
            mGrowing = false;
        }
    }
    protected override void OnTextChanged(EventArgs e) {
        base.OnTextChanged(e);
        resizeLabel();
    }
    protected override void OnFontChanged(EventArgs e) {
        base.OnFontChanged(e);
        resizeLabel();
    }
    protected override void OnSizeChanged(EventArgs e) {
        base.OnSizeChanged(e);
        resizeLabel();
    }
}
11
ответ дан 23 November 2019 в 06:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: