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

时间:2015-04-26 00:53:32

标签: c# drawstring valueconverter

我使用以下内容绘制字符串:

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

问题:

有时我想在left side的{​​{1}}上对齐绘制的字符串。 但是,如果我不知道字符串长度是多少,它就无法工作。

可能但是noob解决方案:

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

line

这不起作用,因为正如您所猜测的那样,我创建了一个数字,而且该数字可以有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

编辑:

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

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, ????)

1 个答案:

答案 0 :(得分:2)

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