¿Se puede usar Console.Clear para borrar solo una línea en lugar de toda la consola?

Mientras trabajaba en un progtwig de preguntas y respuestas para la escuela, se me ocurrió que podía usar Console.Clear() para borrar todo lo que había en la pantalla. Me pregunto si puedo usar Console.Readline(valueOne) , luego solo Console.Readline(valueOne) la respuesta sin la pregunta. Si solo hice una pregunta, funciona Console.Clear .

Tengo varias preguntas con valores no referencias, para borrar si es posible. Quiero dejar de lado las preguntas y solo mostrar varias respuestas. Creo que si guardo las respuestas, podría usar Console.Clear() luego Console.WriteLine() con tres variables. Podría hacer algo como esto:

 Console.WriteLine("Value 1 is: {0:c}" + "Value 2 is: {1:c}" + "Value 3 is: {2:c}, valueOne, valueTwo, valueThree). 

El problema es más fácil con las referencias porque los valores se almacenan y recuperan. Si simplemente uso métodos para pasar el valor y dar salida al valor, main() no tendrá una referencia a esos valores para borrar y volver a generar. Es por eso que me pregunto si puedo hacer una pregunta, luego borrar la línea y dar salida solo a la respuesta (o respuestas).

Solo bash comprender las posibilidades y no intentar configurar un progtwig. Me gusta saber las capacidades de generar un valor de referencia y por valor sin preguntas de salida adicionales.

Descripción

Puede usar la función Console.SetCursorPosition para ir a un número de línea específico. Entonces puedes usar esta función para borrar la línea

 public static void ClearCurrentConsoleLine() { int currentLineCursor = Console.CursorTop; Console.SetCursorPosition(0, Console.CursorTop); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, currentLineCursor); } 

Muestra

 Console.WriteLine("Test"); Console.SetCursorPosition(0, Console.CursorTop - 1); ClearCurrentConsoleLine(); 

Más información

  • Console.SetCursorPosition Method

Una solución simple e imho mejor es esta:

 Console.Write("\r" + new string(' ', Console.WindowWidth) + "\r"); 

Esto funcionó para mí:

 static void ClearLine(){ Console.SetCursorPosition(0, Console.CursorTop); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); } 

“ClearCurrentConsoleLine”, “ClearLine” y el rest de las funciones anteriores deben usar Console.BufferWidth en lugar de Console.WindowWidth (puede ver por qué cuando intenta hacer que la ventana sea más pequeña). El tamaño de la ventana de la consola actualmente depende de su buffer y no puede ser más ancho que este. Ejemplo (gracias a Dan Cornilescu):

 public static void ClearLastLine() { Console.SetCursorPosition(0, Console.CursorTop - 1); Console.Write(new string(' ', Console.BufferWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); } 

Mi método preferido es usar PadRight. En lugar de borrar la línea primero, esto borra el rest de la línea después de que se muestre el nuevo texto, guardando un paso:

 Console.CursorTop = 0; Console.CursorLeft = 0; Console.Write("Whatever...".PadRight(Console.BufferWidth)); 

¿No podríamos simplemente escribir esto en clase

 public static void ClearLine() { Console.SetCursorPosition(0, Console.CursorTop - 1); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); } 

Luego, en general, simplemente escriba

 Console.WriteLine("Test"); ClearLine(); 

Funciona bien para mí oo

Para borrar desde la posición actual hasta el final de la línea actual, haga esto:

  public static void ClearToEndOfCurrentLine() { int currentLeft = Console.CursorLeft; int currentTop = Console.CursorTop; Console.Write(new String(' ', Console.WindowWidth - currentLeft)); Console.SetCursorPosition(currentLeft, currentTop); } 
 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); } } 

Creo que encontré por qué hay algunas respuestas diferentes para esta pregunta. Cuando la ventana se ha redimensionado de forma que tenga una barra de desplazamiento horizontal (porque el búfer es más grande que la ventana) Console.CursorTop parece devolver la línea incorrecta. El siguiente código funciona para mí, independientemente del tamaño de la ventana o la posición del cursor.

 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)); } 

Sin (Console.WindowWidth> = Console.BufferWidth? 1: 0), el código puede mover el cursor hacia arriba o hacia abajo, según la versión que use en esta página y el estado de la ventana.