【问题标题】:How can i determine the width of a drawn string? [duplicate]如何确定绘制字符串的宽度? [复制]
【发布时间】:2015-04-26 00:53:32
【问题描述】:

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

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 from the line。或者,我可以为带有小数分隔符的数字获得一个不错的试错值,如果最终该数字没有小数分隔符,它将位于线条上方(并破坏绘图)。

有什么提示吗?在数字是整数的情况下可能会强制字符串具有,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, ????)

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

【问题讨论】:

  • 您使用的是哪个库? WPF、XNA、GDI?或者更具体地说,g 变量的类型是什么?
  • 始终假定该运算符存在,如果不存在则添加 .00 ?
  • g 将是一个 Graphics 对象 - 这是 winforms / GDI。
  • @JoachimGotzes,是的,这是一种可能性,但复杂的可能性也很容易变得混乱

标签: c# drawstring valueconverter


【解决方案1】:

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

【讨论】:

  • 我已经更新了问题,有一个简单的问题我相信您可以轻松解决,您可以看看吗?
  • 您需要 PaintEventArgs (e),因为您正在调用 e.Graphics.MeasureString。您需要一个 Graphics 实例来调用 MeasureString。您应该在 Paint 事件处理程序中执行此操作,因此您应该有一个 e 来传递。
  • 如果你没有PaintEventArgs(因为你在位图或其他东西上绘图),那么你仍然有一个Graphics 用于绘图的实例,所以只需使用它而不是e.Graphics。您可能希望更改方法的签名以接受Graphics 对象而不是PaintEventArgs。无论如何,该方法只是对 MeasureString 的简单传递,所以我会说你不需要它,真的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多