C#GDI +不能用空格绘制文本

时间:2015-07-28 06:40:32

标签: c# gdi+

我有一些代码:

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);

但是文字在两个单词之间只有一个空格。其他空间被删除。 如何用所有空格绘制文本?

3 个答案:

答案 0 :(得分:2)

您的字符串或其中没有一个必须是逐字字符串。逐字字符串(即@“字符串”)表示在到达下一个引号字符之前不对字符应用任何解释

因此请尝试:

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);

答案 1 :(得分:2)

请改用 TextRenderer.DrawText 。这是自.NET 2.0以来Windows.Forms也使用的内容,除非打开UseCompatibleTextRendering。

    %12th%main%
    %100 feet%
    %12th%main%
    %12th%main%
    %12th%main%
    %100 feet%

答案 2 :(得分:1)

问题是你的字体,有些字体是等宽的(所有字母都有相同的空间,包括空格)而其他字体没有(每个字母不同的空格,例如“i”的空间比“M”少)。请将您的字体更改为等宽字体。

您看到您的文字似乎有单个空格,因为非等宽字体中的空格比等宽字体短。

您可以阅读有关monospaced fonts in Wikipedia的更多信息。