105 votes

Peut-on utiliser Console.Clear pour effacer uniquement une ligne au lieu de toute la console ?

En travaillant sur un programme de questions/réponses pour l'école, il m'est venu à l'esprit que je peux utiliser Console.Clear() pour effacer tout sur l'écran. Je me demande si je peux utiliser Console.Readline(valeurUn), puis afficher uniquement la réponse sans la question. Si je posais une seule question, le Console.Clear fonctionnerait.

J'ai plusieurs questions avec des valeurs non références, à effacer si possible. Je veux exclure les questions et afficher uniquement plusieurs réponses. Je pense que si je stocke les réponses, je pourrais utiliser Console.Clear() puis simplement Console.WriteLine() avec trois variables. Je pourrais faire quelque chose comme cela :

Console.WriteLine("La valeur 1 est: {0:c}" + "La valeur 2 est: {1:c}" + "La valeur 3 est: {2:c}, valeurUn, valeurDeux, valeurTrois).

Le problème est plus simple avec des références car les valeurs sont stockées et récupérées. Si j'utilise simplement des méthodes pour passer par valeur et afficher la valeur, main() n'aura pas de référence à ces valeurs pour effacer et afficher à nouveau. C'est pourquoi je me demande si je peux simplement poser une question, puis effacer la ligne et afficher uniquement la réponse (ou les réponses).

Je cherche simplement à comprendre les possibilités et non à mettre en place un programme. J'aime connaître les capacités de sortie d'une valeur à partir d'une référence et par valeur sans poser de questions supplémentaires.

4voto

Alec Points 21

Nous pourrions simplement écrire la méthode suivante

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

et ensuite l'appeler lorsque nécessaire comme ceci

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

Cela fonctionne bien pour moi.

1voto

Jesse Chisholm Points 633

Pour effacer de la position actuelle jusqu'à la fin de la ligne actuelle, faites ceci :

    public static void ClearToEndOfCurrentLine()
    {
        int currentLeft = Console.CursorLeft;
        int currentTop = Console.CursorTop;
        Console.Write(new String(' ', Console.WindowWidth - currentLeft));
        Console.SetCursorPosition(currentLeft, currentTop);
    }

1voto

Pranav Points 11
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);
    }
}

0voto

Je pense avoir trouvé pourquoi il y a quelques réponses différentes pour cette question. Lorsque la fenêtre a été redimensionnée de sorte qu'elle a une barre de défilement horizontale (parce que le tampon est plus grand que la fenêtre) Console.CursorTop semble renvoyer la mauvaise ligne. Le code suivant fonctionne pour moi, quelle que soit la taille de la fenêtre ou la position du curseur.

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

Sans le (Console.WindowWidth >= Console.BufferWidth ? 1 : 0), le code peut soit déplacer le curseur vers le haut ou vers le bas, selon la version utilisée sur cette page et l'état de la fenêtre.

0voto

s.k.paul Points 2936

Cela fonctionne parfaitement pour moi comme je m'y attendais -

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X