我正在用C#编写一个控制台程序。
有没有办法可以使用Console.Clear()来清除控制台屏幕上的某些内容?
这是我的问题:
我有一个徽标(我把它放在屏幕上使用Console.WriteLine())和一个二维数组,我想保持不变并清除它下面的所有内容。
答案 0 :(得分:22)
您可以使用自定义方法清除部分屏幕...
static void Clear(int x, int y, int width, int height)
{
int curTop = Console.CursorTop;
int curLeft = Console.CursorLeft;
for (; height > 0;)
{
Console.SetCursorPosition(x, y + --height);
Console.Write(new string(' ',width));
}
Console.SetCursorPosition(curLeft, curTop);
}
答案 1 :(得分:8)
修改:答案here显示了如何比我所知道的更强大地操纵控制台。我最初写的内容仍然适用,如果您没有这些设施,可能会使用其他语言,这可能会很有用。
存储徽标和最初生成的数组状态,然后在清除控制台时再次写出保存的值,而不是使用相同的生成过程。
正如其他人所说,控制台并非设计用于此类操作,因此您必须解决此问题。
另一种选择可能是直接写入字符串或字符串构建器而不是控制台,然后每当控制台需要更新时,清除它的输出并将“输出”字符串/流写入控制台。这将允许您在输出文本上执行字符串操作/正则表达式等,以删除/保留特定的内容。
然而,这将涉及大量的控制台开销,因为您最终会在每次更新时重新打印整个输出。
THAT的解决方案可能是保持您写入控制台的并行字符串/流表示,然后当您需要清除时可以清除字符串表示,清除控制台,然后将字符串写入控制台再次。这样你只需要在通常的写操作中添加一个额外的写操作,只有当你清除了控制台时才会发生主要的额外工作。
无论你做什么,写入控制台永远不会是一个快速的操作,如果你正在做大量的操作,把东西写入控制台,它可能会严重拖累你的应用程序的性能。
答案 2 :(得分:1)
您能否清除然后重新编写徽标和阵列?控制台的设计并非按照您的描述使用。