没有背景颜色的控制台文本填充

console text padding without background color

我有一个循环写入一个字符串 10 次,每次都使用较大的填充。 它还将每隔一行的背景颜色设置为深黄色。

int x = 5;
for (int i = 1; i <= 10; i++)
{
    if (i % 2 == 0)
    {
        Console.BackgroundColor = ConsoleColor.DarkYellow;
    }
    else
    {
        Console.ResetColor();
    }

    x = x + 1;
    string str = "word";
    Console.WriteLine(str.PadLeft(x));
}

问题是我的深黄色行从行填充的开始一直被着色。但是我只希望单词本身是没有空格的深黄色。

这只是未经任何测试的黑客攻击,但应该给出如何使其工作的想法:

int x = 5;
for (int i = 1; i <= 10; i++)
{
    Console.ResetColor();
    x = x + 1;
    Console.Write("".PadLeft(x));
    if (i % 2 == 0)
        Console.BackgroundColor = ConsoleColor.DarkYellow;

    string str = "word";
    Console.WriteLine(str);
}

关键的变化是您不需要一次写整行。您可以使用 Console.Write() 来编写没有背景颜色的填充。然后用Console.WriteLine()写完单词+换行。

你应该先写没有背景颜色的空格,然后只写有选定背景颜色的单词:

int x = 5;
for (int i = 1; i <= 10; i++)
{
    Console.ResetColor();
    if (x > 5)
    {
        Console.Write(new String(' ', x - 5));
    }

    if (i % 2 == 0)
    {
        Console.BackgroundColor = ConsoleColor.DarkYellow;
    }

    x = x + 1;
    string str = "word";
    Console.WriteLine(str);
}
Console.ReadLine();