我知道这个问题可能很牵强,但如果这个功能可行,那就太棒了。我想在播放器写入时更改文本的颜色,因此如果键入某些关键字,它们会更改为某种颜色。
我知道您可以更改光标位置,但我不知道这是否有助于更改颜色。我也知道你可以做Console.Clear,但如果可能的话我不想这样做,因为那时我必须保存字符串并重新编写所有内容,并且它不适用于我的程序。
答案 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;
}
}
这段代码有缺陷且不完整,但我认为它展示了潜在的概念。