c # console, problema Console.Clear
-
22-08-2019 - |
Domanda
Sto scrivendo un programma di console in C #.
C'è un modo posso usare un Console.Clear () per solo chiare alcune cose sullo schermo della console?
Ecco il mio problema:
Ho un logo (ho messo su schermo mediante Console.WriteLine ()) e una matrice 2D, che voglio mantenere costante e chiaro tutto al di sotto di esso.
Soluzione
È possibile utilizzare un metodo personalizzato per cancellare parti dello schermo ...
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);
}
Altri suggerimenti
Modifica : La risposta qui mostra come in grado di manipolare la console molto più forte di quanto non ero consapevole. Quello che ho scritto in origine si applica ancora, e potrebbe essere utile se non si dispone di queste strutture a disposizione, forse in una lingua diversa.
Conservare il logo e lo stato inizialmente generato dell'array e poi quando si cancella la console di scrivere i valori salvati ancora una volta, invece di usare la stessa procedura di generazione.
Come altri hanno detto, la console non è progettato per questo tipo di operazione in modo da avere a lavorare intorno ad esso.
Un'altra opzione potrebbe essere quella di scrivere a una stringa o un costruttore di stringa, anziché alla console direttamente, quindi ogni volta che la console necessita di un aggiornamento, chiaro il suo output e scrivere la vostra "uscita" stringa / ruscello alla console. Questo avrebbe permesso di eseguire operazioni sulle stringhe / espressioni regolari, ecc sul tuo testo di output per rimuovere / lasciare le cose specifiche a posto.
Tuttavia, ciò comporterebbe un sacco di console in testa, come si finirebbe per ristampare l'intera produzione su ogni aggiornamento.
Una soluzione che potrebbe essere quello di mantenere una rappresentazione di stringa / flusso parallelo di ciò che si scrive alla console, poi, quando è necessario cancellare è possibile cancellare la rappresentazione di stringa, cancellare la console, quindi scrivere la stringa fuori alla console ancora. In questo modo si potrebbe solo aggiungere un'ulteriore operazione-scrittura al tuo solito scrivere, e il principale lavoro supplementare sarebbe accadere solo quando è stata deselezionata la console.
Qualunque cosa tu faccia, scrivendo alla console non è mai un'operazione veloce, e se si sta facendo un sacco di operazioni in cui roba viene scritto nella console, può essere un peso significativo sulle prestazioni della vostra applicazione.
Si può non è chiaro e poi ri-scrivere il logo e la matrice? La console non è progettato per essere utilizzato come si descrive.