使用DrawString在C#中垂直居中文本

时间:2018-05-02 22:27:23

标签: c# graphics drawing drawstring

我需要在一个完全居中,水平和垂直的面板中绘制一个字符串。

使用MeasureString函数水平居中并不是什么大问题。

错误,MeasureString函数返回一个高度,它处理每个可能的char(如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的返回大小比实际打印的字符高,导致垂直对齐问题。

0 个答案:

没有答案