在椭圆中间绘制文本
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);
}
我有一个应用程序有时会在 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);
}