C#Winforms。在矩形内精确居中绘制文本

C#Winforms。在矩形内精确居中绘制文本,c#,winforms,graphics,C#,Winforms,Graphics,我要做的是在一个圆圈内画一个数字,这样它就可以在垂直和水平方向上居中放置。我使用相同的矩形结构绘制圆形和文本字符串,并使用中心进行水平和垂直对齐。但是,正如你从我在白色圆圈上画了一条水平线的图像中所看到的,文本在中心对齐它的基线,我的眼睛说它在水平方向稍微向左对齐 我曾尝试过通过在矩形顶部添加string.height/2将其向下移动1/2的高度,但仍然不正确。(我调整字体大小,以便根据计数器中的位数将数字放入框中) 请问我该怎么做 var rect = new Rectangle(bmpWid

我要做的是在一个圆圈内画一个数字,这样它就可以在垂直和水平方向上居中放置。我使用相同的矩形结构绘制圆形和文本字符串,并使用中心进行水平和垂直对齐。但是,正如你从我在白色圆圈上画了一条水平线的图像中所看到的,文本在中心对齐它的基线,我的眼睛说它在水平方向稍微向左对齐

我曾尝试过通过在矩形顶部添加string.height/2将其向下移动1/2的高度,但仍然不正确。(我调整字体大小,以便根据计数器中的位数将数字放入框中)

请问我该怎么做

var rect = new Rectangle(bmpWidth - maxCircleDiameter, bmpHeight - maxCircleDiameter, maxCircleDiameter, maxCircleDiameter);
g.FillEllipse(Brushes.White, rect);

using (var format = NewClassFactory.GetFormat(StringAlignment.Center, StringAlignment.Center, StringTrimming.Character))
  g.DrawString(toDisplay, newFont, Brushes.Black, rect, format);

您可以使用颜色和字体并指定不同的文本格式标志,在矩形边框中绘制文本:

var rect = new Rectangle(10, 10, 32, 32);
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
e.Graphics.FillEllipse(Brushes.White, rect);
TextRenderer.DrawText(e.Graphics, "100", this.Font, rect, Color.Black,
    TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter);

美好的除了字体本身现在看起来有点扭曲、污迹斑斑,就像是在稍微偏右的位置画了两次一样,它完全对齐。我的代码上有一个断点,所以我知道它只经过一次.nvm。我添加了背景色选项,现在非常完美。非常感谢你,雷扎:)