English 中文(简体)
C#控制台,控制台清除问题。
原标题:
  • 时间:2008-12-18 14:02:05
  •  标签:

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

我可以使用 Console.Clear() 来清除控制台屏幕上的某些内容吗?

这是我的问题:

我有一个标志(我使用Console.WriteLine() 在屏幕上显示它)和一个2D数组,我要保持恒定并清除它下面的所有内容。

最佳回答

你可以使用自定义方法清除屏幕的部分内容...

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);
}
问题回答

编辑:这里的答案显示了比我意识到的更强大的控制台操作方法。我原来写的仍然适用,如果您没有这些设施可用,或许在另一种语言中可能会有用。 这里 有答案。


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

正如其他人所说,游戏主机并非为这种操作设计的,所以你必须绕过它。

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

然而,这将涉及大量的控制台开销,因为你将在每次更新时重新打印整个输出。

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

无论你做什么,向控制台写入数据都不是一个快速的操作,如果你正在做大量向控制台写入数据的操作,这可能会显著影响你的应用程序性能。

你不能清除并重新编写徽标和阵列吗?控制台不是设计成像你描述的那样使用的。





相关问题
热门标签