12

我正在用 C# 编写一个控制台程序。

有没有办法可以使用 Console.Clear() 仅清除控制台屏幕上的某些内容?

这是我的问题:

我有一个徽标(我使用 Console.WriteLine() 将它放在屏幕上)和一个 2d 数组,我想保持不变并清除它下面的所有内容。

4

3 回答 3

25

您可以使用自定义方法清除部分屏幕...

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);
}
于 2008-12-18T14:41:05.180 回答
8

编辑:这里的答案显示了如何比我意识到的更强大地操纵控制台。我最初写的内容仍然适用,如果您没有可用的这些工具,可能会很有用,也许是不同的语言。


存储数组的徽标和最初生成的状态,然后在清除控制台时再次写出保存的值,而不是使用相同的生成过程。

正如其他人所说,控制台不是为这种操作而设计的,所以你必须解决它。

另一种选择可能是写入字符串或字符串构建器而不是直接写入控制台,然后每当控制台需要更新时,清除它的输出并将您的“输出”字符串/流写入控制台。这将允许您对输出文本执行字符串操作/正则表达式等,以删除/保留特定内容。

但是,这将涉及大量控制台开销,因为您最终会在每次更新时重新打印整个输出。

一个解决方案可能是保留您写入控制台的并行字符串/流表示,然后当您需要清除时,您可以清除字符串表示,清除控制台,然后再次将字符串写入控制台。这样,您只需在通常的写入操作中添加一个额外的写入操作,而主要的额外工作只有在您清除控制台时才会发生。

无论您做什么,写入控制台都不是一个快速的操作,如果您正在执行大量将内容写入控制台的操作,那么它可能会严重拖累您的应用程序的性能。

于 2008-12-18T14:16:27.400 回答
1

可以不清除然后重新编写标志和数组吗?控制台不是为您描述的那样使用而设计的。

于 2008-12-18T14:06:48.183 回答