Console.Clear可以用来清除一行而不是整个控制台吗?
在为学校开展问题/答案计划时,我想到我可以使用Console.Clear()
擦除屏幕上的所有内容。 我不知道是否可以使用Console.Readline(valueOne)
,然后输出没有问题的答案。 如果我只问了一个问题, Console.Clear
工作。
我有几个问题的价值不参考,擦除,如果可能的话。 我想省略问题,只显示几个答案。 我想如果我存储的答案,我可以使用Console.Clear()
然后只有三个variablesConsole.WriteLine()
。 我可以做这样的事情:
Console.WriteLine("Value 1 is: {0:c}" + "Value 2 is: {1:c}" + "Value 3 is: {2:c}, valueOne, valueTwo, valueThree).
引用问题更容易,因为值存储和检索。 如果我简单地使用方法传递值并输出值, main()
将不会引用这些值来清除并重新输出。 这就是为什么我不知道我是否可以问一个问题,然后抹掉这条线,只输出答案(或答案)。
我只是想了解可能性,而不是试图设置一个程序。 我喜欢了解从参考和价值中输出一个值的能力,而不需要额外的输出问题。
描述
您可以使用Console.SetCursorPosition
函数转到特定的行号。 比你可以使用这个function清除线
public static void ClearCurrentConsoleLine() { int currentLineCursor = Console.CursorTop; Console.SetCursorPosition(0, Console.CursorTop); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, currentLineCursor); }
样品
Console.WriteLine("Test"); Console.SetCursorPosition(0, Console.CursorTop - 1); ClearCurrentConsoleLine();
更多信息
- Console.SetCursorPosition方法
一个简单的和更好的解决scheme是这样的:
Console.Write("\r" + new string(' ', Console.WindowWidth) + "\r");
这工作我,
static void ClearLine(){ Console.SetCursorPosition(0, Console.CursorTop); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); }
“ClearCurrentConsoleLine”,“ClearLine”和其他上面的函数应该使用Console.BufferWidth而不是Console.WindowWidth(你可以看到为什么当你尝试使窗口变小)。 控制台的窗口大小目前取决于其缓冲区,不能比它宽。 例子(感谢Dan Cornilescu):
public static void ClearLastLine() { Console.SetCursorPosition(0, Console.CursorTop - 1); Console.Write(new string(' ', Console.BufferWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); }
我们不能在课堂上写这个吗?
public static void ClearLine() { Console.SetCursorPosition(0, Console.CursorTop - 1); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); }
然后在主要,只需键入
Console.WriteLine("Test"); ClearLine();
它对我很好
要从当前位置清除到当前行的末尾,请执行以下操作:
public static void ClearToEndOfCurrentLine() { int currentLeft = Console.CursorLeft; int currentTop = Console.CursorTop; Console.Write(new String(' ', Console.WindowWidth - currentLeft)); Console.SetCursorPosition(currentLeft, currentTop); }
我最喜欢的方法是使用PadRight。 不是先清除行,而是在显示新文本后清除行的其余部分,保存一个步骤:
Console.CursorTop = 0; Console.CursorLeft = 0; Console.Write("Whatever...".PadRight(Console.BufferWidth));
public static void ClearLine(int lines = 1) { for (int i = 1; i <= lines; i++) { Console.SetCursorPosition(0, Console.CursorTop - 1); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); } }
我想我发现为什么这个问题有几个不同的答案。 当窗口已被resize,使其具有水平滚动条(因为缓冲区大于窗口)Console.CursorTop似乎返回错误的行。 以下代码适用于我,无论窗口大小或光标位置如何。
public static void ClearLine() { Console.SetCursorPosition(0, Console.CursorTop); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - (Console.WindowWidth >= Console.BufferWidth ? 1 : 0)); }
如果没有(Console.WindowWidth> = Console.BufferWidth?1:0),则代码可能会上下移动光标,具体取决于您在此页面使用的版本以及窗口的状态。