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();
我想用另一种背景和前景色来写一行。直接的解决方案也更改了行尾 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();