我正在尝试为将在MSN Messenger上运行的C#应用程序创建文本颜色.我正在排队等待所有事情.
这是我想要的输出示例:
1) Pizza Hut 123 Fake St. 2) Domino's Pizza 123 Fake St. 3) The Cheesecake Cafe 123 Fake St. 4) Capital Pizza & Steakhouse 123 Fake St. 5) Funky Pickle Pizza 123 Fake St. 6) Boston Pizza 123 Fake St. 7) Rose Bowl Rouge Lounge 123 Fake St. 8) Royal Pizza 123 Fake St. 9) A Columbus Pizza & Donair Inc 123 Fake St.
但因为它是一个可变宽度的字体,它显示如下:
1) Pizza Hut 123 Fake St. 2) Domino's Pizza 123 Fake St. 3) The Cheesecake Cafe 123 Fake St. 4) Capital Pizza & Steakhouse 123 Fake St. 5) Funky Pickle Pizza 123 Fake St. 6) Boston Pizza 123 Fake St. 7) Rose Bowl Rouge Lounge 123 Fake St. 8) Royal Pizza 123 Fake St. 9) A Columbus Pizza & Donair Inc 123 Fake St.
我已经尝试使用C#string.PadRight()函数以及创建我自己的函数,使用空格和制表符添加填充.两者都可以使用固定宽度字体,但可以使用可变宽度字体.
有没有办法确定给定字体中字符串的宽度?
或者有没有人有任何其他建议?
只需使用TextRenderer类.最简单的情况:
Size size = TextRenderer.MeasureText("Hello world", someFont);
如果您无法访问System.Windows.Fonts Graphics.MeasureString仍然存在,它有一些限制,但应该做的工作:
Bitmap bmp = new Bitmap(1,1); Graphics graphics = Graphics.FromImage(bmp); SizeF size = graphics.MeasureString("Hello world", someFont);
但请注意,如果文本的字体和空格必须相同,则可能会出现无法完美对齐文本的情况.我不知道在你的情况下MSN Messenger能做什么,但除非你有权访问至少一部分HTML,否则你将无法获得完美的输出.
您还应该知道,如果您在本地计算机上进行测量并发送给另一台没有安装正确字体的列,您的列将不再像列一样,因此您只能使用所有计算机上显示的基本字体子集.
如果还需要多个操作系统支持,则会出现一些大问题,因为Mac和PC上的Arial字体看起来并没有完全相同(并且测量).