C# 在椭圆的中间绘制文本

C# 在椭圆的中间绘制文本,c#,winforms,drawstring,C#,Winforms,Drawstring,我有一个应用程序,它在某个点上在面板控件上绘制了许多圆圈。然后我想给每个圆圈命名(一个字母和一个数字)。我希望文本居中,使它看起来漂亮。现在,我有这样的想法: 我要做的是,取圆的中心,然后做以下操作: Graphics.DrawString($"s{i+1}", panel.Font, new SolidBrush(Color.White), pointOnCircle.X, pointOnCircle.Y); (圆心X和Y的点是圆心的坐标)。正如你所看到的,它看起来有点糟糕 我的问题是:有

我有一个应用程序,它在某个点上在
面板
控件上绘制了许多圆圈。然后我想给每个圆圈命名(一个字母和一个数字)。我希望文本居中,使它看起来漂亮。现在,我有这样的想法:

我要做的是,取圆的中心,然后做以下操作:

Graphics.DrawString($"s{i+1}", panel.Font, new SolidBrush(Color.White), pointOnCircle.X, pointOnCircle.Y);
(圆心X和Y的
点是圆心的坐标)。正如你所看到的,它看起来有点糟糕

我的问题是:有没有一种方法可以计算出指定字体大小的X和Y,以及那些小圆圈的半径,使它看起来居中

使用公认答案或@Johnny Mopp评论的结果:


使用
图形。测量
获取指定字体的字符串大小(X和Y)。您可以使用生成的大小将文本居中。

您需要使用
DrawString
方法的重载,然后使用and将字符串在圆圈的中心和中间对齐:

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);
}

不要测量或计算任何东西。该系统将做得更好:只需使用并绘制成与椭圆相同的矩形。@Johnnymop,您应该将其作为答案,而不是注释!很好的建议,100%完成了任务!编辑了带有结果的问题