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.

189voto

dknaack Points 26873

Description

Vous pouvez utiliser la fonction Console.SetCursorPosition pour aller à un numéro de ligne spécifique. Ensuite, vous pouvez utiliser cette fonction pour effacer la ligne :

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

Exemple

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

Plus d'informations

62voto

hellow Points 7534

Une solution plus simple et à mon avis meilleure est :

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

Il utilise le retour chariot pour aller au début de la ligne, puis imprime autant d'espaces que la largeur de la console et retourne au début de la ligne, vous permettant d'afficher votre propre texte par la suite.

19voto

User0123456789 Points 75

"ClearCurrentConsoleLine", "ClearLine" et le reste des fonctions ci-dessus devraient utiliser Console.BufferWidth au lieu de Console.WindowWidth (vous pouvez voir pourquoi lorsque vous essayez de réduire la fenêtre). La taille de la fenêtre de la console dépend actuellement de son tampon et ne peut pas être plus large que cela. Exemple (merci à Dan Cornilescu):

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

10voto

bartburkhardt Points 579

Cela a fonctionné pour moi :

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

8voto

John Points 133

Ma méthode préférée est d'utiliser PadRight. Au lieu d'effacer la ligne d'abord, cela efface le reste de la ligne après l'affichage du nouveau texte, ce qui permet d'économiser une étape :

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

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