Масштабировать текст метки в соответствии с размером метки - PullRequest
0 голосов
/ 25 октября 2018

Ищите способ изменить размер текста Labels в соответствии с изменением размера Label.(т. е. если размер ярлыка увеличится на 50%, то размер текста также увеличится примерно на 50%).

Существует множество статей, в которых текст настраивается так, чтобы он полностью вписывался в текст.размер Label, который не подходит для того, что я хочу.
У меня уже есть рабочая версия этого.

Почему-то мне нужно иметь возможность ссылаться на предыдущий размер Label как только изменение размера завершено, чтобы определить отношение, чтобы использовать для изменения размера текста.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Пример использования Graphics.ScaleTransform () , используемого для добавления матрицы преобразования к следующим операциям Graphics.

Обратите внимание, что это преобразование применимо до тех пор, покаГрафика может рисовать шрифт в заданном размере.Если шрифт слишком маленький или слишком большой, рендеринг не будет работать должным образом.
Минимальный размер шрифта должен составлять 8.5 ~ 9 точек и не более 72.
За пределами этого диапазона результат непредсказуем,(например, текст может просто исчезнуть).
Таким образом, минимальный / максимальный размер элемента управления должен быть установлен во время разработки и не масштабироваться сверх этих мер.

Свойство Label.TextAlignустановите здесь ContentAlignment.MiddleLeft.
Также: .AutoSize = false; .Text = "Some text that needs to fit";

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;

private void label1_Paint(object sender, PaintEventArgs e)
{
    Label label = sender as Label;
    e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
    float TextWidth = e.Graphics.MeasureString(label.Text, label.Font, label.Size, StringFormat.GenericTypographic).Width;
    float scale = (label.ClientSize.Width - label.Padding.Left) / TextWidth;
    e.Graphics.Clear(label.BackColor);
    e.Graphics.ScaleTransform(scale, scale);

    using (SolidBrush brush = new SolidBrush(label.ForeColor))
        e.Graphics.DrawString(label.Text, label.Font, brush,  
                              new RectangleF(PointF.Empty, label1.ClientSize), 
                              StringFormat.GenericTypographic);
}

Визуальный результат:

Text ScaleTransform

0 голосов
/ 25 октября 2018

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

Вы можете получить размер рендеринга метки с помощью;

System.Drawing.Size TextRenderer.MeasureText (string text, System.Drawing.Font font);

После получения размера рендеринга метки вы можете переустановить label.width и label.height, умножив возвращаемый размер на коэффициент (например, Size * 0.5), что даст вам половинутребуемый размер.

Вы можете использовать тот же метод в обработчике событий SizeChanged метки, чтобы определить, является ли MeasuredSize;

  • Меньше текущего размера метки: увеличивайте размер шрифта, пока он не достигнет ~= labelize
  • Больше текущего размера метки: уменьшить размер шрифта до ~ = labelize или
  • Равно текущему размеру метки: ничего не делать?

Надеюсь, я мог бы дать вам немногопонимание того, как этого достичь.

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