【问题标题】:Drawing a text in the middle of an ellipse在椭圆中间绘制文本
【发布时间】:2018-10-11 01:21:55
【问题描述】:

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

我所做的是,我以那个圆圈的中心为中心,然后执行以下操作:

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

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

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

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

【问题讨论】:

  • 不要不要测量或计算任何东西。 系统会做得更好:只需使用centered stringformat 并在您用于椭圆的同一矩形中绘制。
  • @JohnnyMopp,你应该把它作为答案,而不是评论!很好的建议,100% 完成了这项工作!用结果编辑问题

标签: c# winforms drawstring


【解决方案1】:

您需要使用DrawString方法的重载that takes a StringFormat argument,然后使用StringFormat.AlignmentStringFormat.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);
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多