Console.ResetColor 完全没有重置线路

Console.ResetColor is not resetting the line after completely

我想用另一种背景和前景色来写一行。直接的解决方案也更改了行尾 space 的背景,这看起来很糟糕。

Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("----------------------CoNet------------------------");
Console.ResetColor();
Console.WriteLine("Akkoord? type: ja of nee: ");  // The rest of this line gets blue. Why?

第一行完全是蓝底白字,没问题。第二行应该是全黑底灰(默认),但其内容的免费 space 全是蓝色。

这怎么可能,我做错了什么?

我有这个问题

但它的修复真的很容易

像这样的第一个箱子方法

 public static void resetConsole()
    {
        Console.BackgroundColor = ConsoleColor.Black;
        Console.ForegroundColor = ConsoleColor.Gray;
    }

然后调用它

Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine ("---test---");
resetConsole(); //this is what we make
Console.WriteLine("test123: "); 

发生这种情况是因为您的 Console.WriteLine() 调用迫使控制台 window 滚动。您的代码片段无法重现它,因为它写入控制台缓冲区的顶部,而不是像您的真实程序那样写入底部。或者换句话说,您的真实程序已经生成了一堆输出。通过在 Main() 方法的顶部插入此行来获取重现:

   for (int ix = 0; ix < Console.BufferHeight; ++ix) Console.WriteLine();

是的,滚动会强制将另一行添加到输出缓冲区,它不可避免地会使用调用 WriteLine() 时有效的默认颜色进行着色。您的下一个 Console.WriteLine() 调用不会完全重置它。

没有超级流畅的方法可以避免它。您可能也不喜欢:

 Console.Write("------------------------------test------------------------------");
 Console.ResetColor();
 Console.WriteLine();
 Console.WriteLine("test123 blablablablablabla: ");

尽管现在是一致的。

您可以使用 Console.Write(而不是 Console.Write行)解决问题

解决方案:

   Console.BackgroundColor = ConsoleColor.Red;
   Console.ForegroundColor = ConsoleColor.White;
   Console.Write("### SOME SAMPLE TEXT");
   Console.ResetColor();
   Console.WriteLine();