我正在尝试为将在 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() 函数以及创建自己的函数,使用空格和制表符添加填充。两者都适用于固定宽度字体,但适用于可变宽度字体。
有什么方法可以确定给定字体中字符串的宽度吗?
或者有人有其他建议吗?
只需使用文本渲染器 http://msdn.microsoft.com/en-us/library/system.windows.forms.textrenderer.aspx班级。最简单的情况:
Size size = TextRenderer.MeasureText("Hello world", someFont);
如果您无权访问 System.Windows.Fonts图形.测量字符串 http://msdn.microsoft.com/en-us/library/6xe5hazb.aspx仍然存在,它有一些限制,但应该完成以下工作:
Bitmap bmp = new Bitmap(1,1);
Graphics graphics = Graphics.FromImage(bmp);
SizeF size = graphics.MeasureString("Hello world", someFont);
但请注意,如果文本的字体和空格必须相同,则有时无法完美对齐文本。我不知道 MSN Messenger 在您的情况下能够做什么,但除非您至少可以访问 HTML 的一个子集,否则您将不会获得完美的输出。
您还应该注意,如果您在本地计算机上进行测量并发送到另一台未安装正确字体的计算机,您的列将不再像列,因此您只能使用所有计算机上显示的基本字体子集。
如果还需要多个操作系统支持,那么您将遇到一些大问题,因为 Mac 和 PC 上的 Arial 字体看起来(和测量)并不完全相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)