2008-12-18 37 views
11

Estoy escribiendo un programa de consola en C#.C# console, Console.Clear problema

¿Hay alguna manera de que pueda usar Console.Clear() para borrar solo ciertas cosas en la pantalla de la consola?

Aquí está mi problema:

Tengo un logotipo (lo pongo en pantalla mediante Console.WriteLine()) y una matriz 2D que quiero mantener constante y clara el contenido de abajo.

Respuesta

21

Se puede usar un método personalizado para borrar partes de la pantalla ...

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

Esto es intrigante. Debo verificar esto. – LeppyR64

+0

así que si uso Console.SetWindowSize (ancho, alto) ;, el ancho es 60, alto 40. ¿cómo hago para borrar la mitad inferior de la pantalla? – user47415

+0

Borrar (0,20,60,20); – Diadistis

1

¿No puede borrar y luego volver a escribir el logotipo y la matriz? La consola no está diseñada para ser utilizada como usted describe.

8

Editar: La respuesta here muestra cómo se puede manipular la consola mucho más poderosa de lo que era consciente. Lo que originalmente escribí aún se aplica, y podría ser útil si no tiene estos recursos disponibles, tal vez en un idioma diferente.


tienda el logotipo y el estado generado inicialmente de la matriz y luego cuando se desactiva la consola escribir los valores guardados de nuevo, en lugar de utilizar el mismo procedimiento de generación.

Como han dicho otros, la consola no está diseñada para este tipo de operación, por lo que debe evitarla.

Otra opción podría ser escribir en una cadena o en un generador de cadenas en lugar de en la consola directamente, luego cada vez que la consola necesite actualizarse, borre su salida y escriba la secuencia/flujo de salida en la consola. Esto le permitiría realizar operaciones de cadena/expresiones regulares, etc. en su texto de salida para eliminar/dejar cosas específicas en su lugar.

Sin embargo, esto implicaría una gran sobrecarga de la consola ya que terminaría reimprimiendo toda la salida en cada actualización.

Una solución para ESO podría ser mantener una representación de cadena/secuencia paralela de lo que escribe en la consola, luego, cuando necesite borrar, puede borrar la representación de cadena, borrar la consola, luego escribir la cadena en el consola de nuevo. De esta forma, solo agregaría una operación de escritura adicional a su escritura habitual, y el mayor trabajo adicional ocurriría solo cuando borre la consola.

Hagas lo que hagas, escribir en la consola nunca es una operación rápida, y si estás haciendo muchas operaciones donde se escriben cosas en la consola, puede ser un lastre significativo para el rendimiento de tu aplicación.