c# GDI+不能绘制带有空格的文本

本文关键字:空格 文本 GDI+ 不能 绘制 | 更新日期: 2023-09-27 18:04:56

我有一些代码:
string text = "Some text't with tabs't  here!";
string spaces = "";
for (int i = 0; i < 4; i++)
{
    spaces += " ";
}
text = text.Replace(@"'t", spaces);

我将所有制表符替换为四个空格,然后尝试绘制文本:

graphics.DrawString(text, font, new SolidBrush(Color.Black), offsetX, offsetY);

但是文本在单词之间只有一个空格。其他的空间被移除了。我如何用所有的空格绘制文本?

c# GDI+不能绘制带有空格的文本

使用TextRenderer。DrawText 。这也是Windows所使用的。. net 2.0以后的表单,除非UseCompatibleTextRendering被打开。

TextRenderer.DrawText(graphics, text, font,
    new Point(offsetX, offsetY), Color.Black, TextFormatFlags.ExpandTabs);

两个字符串都必须是逐字字符串。逐字字符串(即@"string")意味着,在到达下一个引号字符之前不对字符应用任何解释

所以试试这个:

string text = "Some text't with tabs't  here!";
...
text = text.Replace("'t", spaces);

或:

string text = @"Some text't with tabs't  here!";
...
text = text.Replace(@"'t", spaces);

问题是你的字体,有些字体是等宽的(所有字母都有相同的空间,包括空格),而其他字体没有(每个字母都有不同的空间,例如"i"的空间比"M"的空间小)。请把你的字体改成等宽字体。

你看你的文字看起来像有一个空格,因为非等宽字体的空格比等宽字体的短。

你可以在维基百科上阅读更多关于等宽字体的内容。