在椭圆中间绘制文本

Drawing a text in the middle of an ellipse

我有一个应用程序有时会在 Panel 控件上绘制许多圆圈。然后我想命名每个圆圈(只是一个字母和一个数字)。我希望文本居中,以使其看起来不错。现在,我有这样的东西:

我做的是取圆心,然后执行以下操作:

Graphics.DrawString($"s{i+1}", panel.Font, new SolidBrush(Color.White), pointOnCircle.X, pointOnCircle.Y);

pointOnCircle.X and Y为圆心坐标)。如您所见,它看起来有点糟糕。

我的问题是:有没有办法以某种方式计算指定字体大小和那些小圆半径的 X 和 Y,使其看起来居中?

使用已接受的答案或@Johnny Mopp 评论的结果:

使用 Graphics.MeasureString 获取指定字体的字符串大小(X 和 Y)。您可以使用生成的大小使文本居中。

您需要使用 DrawString 方法的重载 that takes a StringFormat argument and then use the StringFormat.Alignment and StringFormat.LineAlignment 来使字符串在圆心和圆的中间对齐:

using (StringFormat sf = new StringFormat())
{
    sf.Alignment = StringAlignment.Center;
    sf.LineAlignment = StringAlignment.Center;

    Graphics.DrawString($"s{i + 1}", panel.Font, new SolidBrush(Color.White),
                        pointOnCircle.X, pointOnCircle.Y, sf);
}