Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定绘制字符串的宽度?_C#_Drawstring_Valueconverter - Fatal编程技术网

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

C# 如何确定绘制字符串的宽度?,c#,drawstring,valueconverter,C#,Drawstring,Valueconverter,我正在使用以下命令绘制字符串: g.DrawString(somestring, somefont, new SolidBrush(Color.Black), X where it starts, Y where it starts)); 问题: 有时我想对齐行的左侧上绘制的字符串。 但是,如果我不知道字符串的长度是多少,它就不起作用了 可能但不可行的解决方案: 计算字符数,乘以一个试错值,然后在X位置减去它,如下所示: string somestring = Convert.ToString

我正在使用以下命令绘制字符串:

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

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

可能但不可行的解决方案:

计算字符数,乘以一个试错值,然后在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));
这不起作用,因为正如您所猜测的,我正在创建一个数字,这个数字可以有一个
十进制分隔符,也可以没有

这就是问题所在,因为小数点分隔符不是一个很宽的字符,但仍然可以计数,它会将我的字符串neptune发送到远离行的地方。或者我可以为一个带小数点分隔符的数字得到一个合适的试错值,如果最终该数字没有小数点分隔符,它将位于线的上方(并破坏图形)

有什么提示吗?在数字为整数的情况下,是否可能强制字符串具有
,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
将是一个
图形
对象-这是winforms/GDI。@JoachimGotzes,是的,这是一种可能性,但是一个复杂的运算符也很容易得到消息。我已经更新了这个问题,还有一个简单的问题,我相信你可以很容易地解决,你能看一下吗?你需要painteventags(
e
),因为你正在调用
e.Graphics.MeasureString
。您需要一个
Graphics
实例来调用MeasureString。您应该在
Paint
事件处理程序中执行此操作,因此您应该有一个
e
来传递。如果您没有
PaintEventArgs
(因为您是在位图或其他东西上绘制的),那么您仍然会有一个正在使用的
Graphics
实例,所以只需使用它而不是
e.Graphics
。您可能希望更改方法的签名以接受
Graphics
对象,而不是
PaintEventArgs
。这种方法只是一种简单的测量方法,所以我想说你不需要它,真的。。。