Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制台,控制台,问题解决了_C#_Console Application - Fatal编程技术网

C# 控制台,控制台,问题解决了

C# 控制台,控制台,问题解决了,c#,console-application,C#,Console Application,我正在用C#编写一个控制台程序 有没有一种方法可以使用Console.Clear()只清除控制台屏幕上的某些内容 这是我的问题: 我有一个徽标(我使用Console.WriteLine()将其放在屏幕上)和一个2d数组,我希望它保持不变并清除它下面的所有内容 您能否先清除然后重新写入徽标和阵列?控制台的设计并非如您所述。编辑:答案显示了您可以如何比我所知道的更有力地操作控制台。我最初写的东西仍然适用,如果您没有这些可用的工具,也许可以使用另一种语言,可能会很有用 存储徽标和最初生成的阵列状态,

我正在用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);
}

这很有趣。我必须检查一下。所以如果我使用Console.setWindowsSize(宽度、高度);,宽度为60,高度为40。我该如何清理屏幕的下半部分?酷!由于您处理的是半个屏幕,因此避免使用控制台。清除命令。你仍然在重写屏幕的一半。效果很好,保留了我想要的。但是,清除的菜单会重新出现在清除的空间下方。我需要它在清除的空间中刷新。有什么建议我可以修改上面的Clear方法来解决这个问题吗?在Clear方法之后调用Console.SetCursorPosition来将光标精确地放在需要写入的位置如何?i、 e:清晰(0,20,60,20);控制台。设置光标位置(0,20);