c# - 使用可变宽度字体创建文本列

标签 c# text-formatting windows-live-messenger

我正在尝试为将在 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类(class)。最简单的情况:

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 字体看起来(和尺寸)并不完全相同。

关于c# - 使用可变宽度字体创建文本列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/604298/

相关文章:

c# - F# 异步 lambda 与 C# 异步模型互操作

android - 像 Evernote 应用程序一样向 EditText 添加复选框

msn-messenger - 您如何**以编程方式**在实时信使中部署自定义表情符号?

.net - 如何为 Live Messenger 2011 创建插件?

c# - double 不能表示任何 2^n 的数字而没有精度问题吗? n 是自然的

c# - .Net HTML 编辑器控件

c# - 何时分别使用 T[]、List<T>、IEnumerable<T>?

xml - 格式化 xml 字符串的好代码

ios - iOS 移动设备上的字体渲染问题

cocoa - cocoa 中的 Windows Live Messenger API?