gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:12:00 26 4
gpt4 key购买 nike

我正在尝试为将在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com