Действительно центрировать текст вертикально в C # с DrawString - PullRequest
0 голосов
/ 03 мая 2018

Мне нужно нарисовать строку на панели идеально по центру, по горизонтали и вертикали.

Центрирование по горизонтали не имеет большого значения с помощью функции MeasureString.

Ошибка, функция MeasureString возвращает высоту, которая заботится о каждом возможном символе (например, P и p), но не реальную высоту фактической строки.

Вот пример кода, который я использую:

using (Graphics gr = Graphics.FromImage(mBackImage))
{
    gr.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
    gr.FillRectangle(new SolidBrush(BackColor), new Rectangle(0, 0, this.Width, this.Height));
    var f = new Font(Font.FontFamily, this.ClientSize.Height, FontStyle.Bold, GraphicsUnit.Pixel);
    var sz = gr.MeasureString(Label, f);
    var pt = new PointF((this.ClientSize.Width - sz.Width) / 2, (this.ClientSize.Height - sz.Height) / 2);

    gr.DrawString(Label, f, new SolidBrush(ForeColor), pt);
}

Моя цель - рисовать цифры, и в результате цифры рисуются слишком высоко.

Даже если я изменю текст с «10» на «P», на «p», и я вижу, что текст остается выровненным по «базовой линии».

Я действительно хотел бы центрировать текст, в зависимости от реальной площади.

Как мне этого добиться?

Примечание: этот вопрос абсолютно не дублирует «Центр текста для печати чеков», потому что я говорю о вертикальном центрировании, а не о горизонтальном центрировании.

MeasureString или MeasureCharacterRanges возвращают размеры выше реальных печатных символов, вызывая проблемы с вертикальным выравниванием.

...