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

C# 如何在控制台应用程序中更改打印后的文本颜色?,c#,console-application,C#,Console Application,我知道这个问题可能有些牵强,但如果这个功能可以实现,那就太棒了。我想在玩家编写文本时更改文本的颜色,因此如果键入了某些关键字,它们将更改为特定的颜色 我知道你可以改变光标的位置,但我不知道这是否有助于改变颜色。我也知道你可以使用控制台。清楚,但如果可能的话,我不想这样做,因为我必须保存字符串并重新写入所有内容,这对我的程序不适用/似乎合理。简短回答:通常不适用,因为从历史上看,标准输出是一种只写介质(想想1960年代的电传打印机) 复杂的答案:是的,多亏了\r的魔力 基本上,您可以读取用户在每次

我知道这个问题可能有些牵强,但如果这个功能可以实现,那就太棒了。我想在玩家编写文本时更改文本的颜色,因此如果键入了某些关键字,它们将更改为特定的颜色


我知道你可以改变光标的位置,但我不知道这是否有助于改变颜色。我也知道你可以使用控制台。清楚,但如果可能的话,我不想这样做,因为我必须保存字符串并重新写入所有内容,这对我的程序不适用/似乎合理。

简短回答:通常不适用,因为从历史上看,标准输出是一种只写介质(想想1960年代的电传打印机)

复杂的答案:是的,多亏了
\r
的魔力

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

您不需要自己手动打印每个击键(直到用突出显示重新打印)。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;
    }
}

这段代码有缺陷且不完整,但我认为它演示了基本概念。

更详细地说,这里有Console.CursorLeft和CursorTop属性,允许您定位将在窗口中写入文本的位置。因此,您可以扩展Dai的建议,在控制台屏幕上的任何位置重写文本,以实现您的目标。当然,如果屏幕滚动并移动您已经写入的文本,则所有赌注都将被取消。没有人说基于控制台的图形将变得容易。:)