c# - 在椭圆中间绘制文本

标签 c# winforms drawstring

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

enter image description here

我所做的就是以该圆的中心为中心,然后执行以下操作:

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

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

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

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

enter image description here

最佳答案

您需要使用 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);
}

关于c# - 在椭圆中间绘制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52745317/

相关文章:

java - AWT Graphics DrawString 导致斜体 - 倾斜字体的宽度不正确

c# - DropDownList onChange 在 selectedIndex 0 时不起作用

c# - 如何使全局对象线程安全

c# - 如何使用 Graphics.DrawString 绘制双倍高度文本?

Java - 在 Swing 中加入多个绘图字符串

c# - 如何通过添加缩放按钮控制Windows窗体图表的放大和缩小

c# - 将十六进制字符串转换为图像

c# - SignalR 在 Chrome 上使用服务器发送的事件

C# 如何从 WinForms 中的 ComboBox 获取枚举值?

c# - 有没有什么方法可以用所有国家名称填充 winforms 中的组合框,并用所选国家/地区的城市填充另一个组合框?