如何确定绘制字符串的宽度?

How can i determine the width of a drawn string?

我正在使用以下方法绘制字符串:

g.DrawString(somestring, somefont, new SolidBrush(Color.Black), X where it starts, Y where it starts));

问题:

有时我想在 lineleft side 上对齐绘制的字符串。 但是,如果我不知道字符串长度是多少,它就不起作用。

可能但菜鸟的解决方案:

计算字符数,乘以试错值,然后在 X 位置减去它,如下所示:

string somestring = Convert.ToString(Math.Round(10 * somevalue) / 10) + "m";
int stringcount1 = somestring.Count();
g.DrawString(somestring, somefont, new SolidBrush(Color.Black), X -stringcount1 * trialanderrorvalue, Y));

这是行不通的,因为您可以猜到,我正在创建一个数字,而该数字可以有 decimal separator 也可以没有。

这就是问题所在,因为小数点分隔符不是很宽的字符,但仍然很重要,它会将我的字符串 neptune-far 发送到该行之外。或者我可以为带有小数分隔符的数字获得一个不错的试错值,如果最终该数字没有小数分隔符,它将在线上方(并破坏绘图)。

有什么提示吗?在数字是整数的情况下可能强制字符串具有 ,0?

编辑:

我现在创建了一个方法,该方法将 return 给定字符串和字体的 SizeF 对象。

    static SizeF MeasureStringMin(string measureString, Font stringFont, PaintEventArgs e)
    {
        //// Set up string. 
        //string measureString = "Measure String";
        //Font stringFont = new Font("Arial", 16);

        // Measure string.
        SizeF stringSize = new SizeF();

        stringSize = e.Graphics.MeasureString(measureString, stringFont);

        return stringSize;
    }

问题是当我使用类似

的东西回忆这个函数时
SizeF stringSize = new SizeF();
stringSize = MeasureStringMin(somestring, somefont, ????)

我一直不知道在第三个变量中放什么,有提示吗?为什么我需要 PaintEventArgs?

您需要MeasureString功能!在绘制之前使用它来获取字符串的确切尺寸,并相应地调整位置。