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
。这种方法只是一种简单的测量方法,所以我想说你不需要它,真的。。。