如何在打印后更改控制台应用程序中的文本颜色?

时间:2014-10-15 23:43:09

标签: c# console-application

我知道这个问题可能很牵强,但如果这个功能可行,那就太棒了。我想在播放器写入时更改文本的颜色,因此如果键入某些关键字,它们会更改为某种颜色。

我知道您可以更改光标位置,但我不知道这是否有助于更改颜色。我也知道你可以做Console.Clear,但如果可能的话我不想这样做,因为那时我必须保存字符串并重新编写所有内容,并且它不适用于我的程序。

1 个答案:

答案 0 :(得分:2)

简短回答:一般不会,因为标准输出在历史上一直是只写媒体(想想20世纪60年代的电传打字机)。

复杂的答案:是的,感谢\r的魔力。

基本上,您可以阅读用户在每次击键时输入的内容并自行跟踪(可能在StringBuilder中),然后如果用户键入魔术字然后擦除先前打印的行使用\r(将插入符号移动到控制台的第一列而不创建新行),然后覆盖先前在那里打印的内容,但在重新打印之前设置Console.ForegroundColor

您不需要自己手动打印每个击键(直到用高亮显示重新打印),因为Console.ReadKey不会干扰控制台窗口的正常操作及其本地回显行为。

这里有一些简单的事情:

StringBuilder sb = new StringBuilder();
while( true ) {

    ConsoleKeyInfo key = Console.ReadKey();
    if( !Char.IsControl( key.KeyChar ) ) {

        sb.Append( key.KeyChar );
        if( sb.ToString() == "magic!" ) {

            Console.Write("\r");
            Console.ForegroundColor = ConsoleColor.Blue;
            Console.Write( sb.ToString() );
            Console.ResetColor();
        }
    } else {
        sb.Length = 0;
    }
}

这段代码有缺陷且不完整,但我认为它展示了潜在的概念。