Мне нужно нарисовать строку на панели идеально по центру, по горизонтали и вертикали.
Центрирование по горизонтали не имеет большого значения с помощью функции 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 возвращают размеры выше реальных печатных символов, вызывая проблемы с вертикальным выравниванием.