【问题标题】:Console.ResetColor is not resetting the line after completelyConsole.ResetColor 未完全重置该行
【发布时间】:2015-09-17 09:32:05
【问题描述】:

我想用另一种背景和前景色写一行。直截了当的解决方案也改变了下一行末尾空格的背景,这看起来很糟糕。

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?

第一行是蓝底白字,没关系。第二行应该是黑底灰(默认),但其内容右侧的可用空间都是蓝色的。

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

【问题讨论】:

标签: c# colors console console.writeline


【解决方案1】:

这是因为您的 Console.WriteLine() 调用强制控制台窗口滚动。您的 sn-p 无法重现它,因为它写入控制台缓冲区的顶部,而不是像您的真实程序那样写入底部。或者换句话说,你的真实程序已经生成了一堆输出。通过在 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: ");

尽管它现在是一致的。

【讨论】:

  • 最后一个想法很完美,我也刚刚在 C# 聊天中得到了答案,感谢您帮助我并理解它为什么会出错。我将使用该代码:)
【解决方案2】:

我有这个问题

但它的修复真的很容易

第一个这样的 crate 方法

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

【讨论】:

  • 它确实解决了问题
【解决方案3】:

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

解决方案:

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

【讨论】:

  • 为我修复了它。非常感谢!
猜你喜欢
  • 2019-04-30
  • 1970-01-01
  • 2015-05-07
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多