web-dev-qa-db-fra.com

Est-il possible d'écrire sur la console en couleur dans .NET?

En écrivant un petit outil en ligne de commande, il serait agréable de générer des couleurs différentes. Est-ce possible?

160
NibblyPig

Oui. Voir ceci article . Voici un exemple à partir de là:

Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("White on blue.");

enter image description here

213
Mark Byers
class Program
{
    static void Main()
    {
        Console.BackgroundColor = ConsoleColor.Blue;
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine("White on blue.");
        Console.WriteLine("Another line.");
        Console.ResetColor();
    }
}

Tiré de ici .

104
Darin Dimitrov

Les commentaires ci-dessus sont des réponses solides, mais notez qu'ils ne sont pas thread-safe. Si vous écrivez sur la console avec plusieurs threads, le changement de couleur ajoutera une condition de concurrence critique pouvant générer une sortie étrange. C'est simple à corriger cependant:

public class ConsoleWriter
{
    private static object _MessageLock= new object();

    public void WriteMessage(string message)
    {
        lock (_MessageLock)
        {
            Console.BackgroundColor = ConsoleColor.Red;
            Console.WriteLine(message);
            Console.ResetColor();
        }
    }
}
46
Roger Hill

J'ai créé un petit plugin (disponible sur NuGet ) qui vous permet d'ajouter n'importe lequel (si pris en charge par votre terminal) couleur à la sortie de votre console, sans les limitations des solutions classiques.

Cela fonctionne en étendant l'objet String et la syntaxe est très simple:

"colorize me".Pastel("#1E90FF");

Les couleurs de premier plan et d'arrière-plan sont prises en charge.

enter image description here

15
silkfire

Oui, c'est facile et posible. Définir les premières couleurs par défaut.

Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.White;
Console.Clear();

Console.Clear() il est important de définir de nouvelles couleurs pour la console. Si vous ne faites pas cette étape, vous pouvez voir les couleurs combinées lorsque vous demandez des valeurs avec Console.ReadLine().

Ensuite, vous pouvez changer les couleurs sur chaque impression:

Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Red text over black.");

Lorsque vous avez terminé votre programme, rappelez-vous de réinitialiser les couleurs de la console à la fin:

Console.ResetColor();
Console.Clear();

Maintenant, avec netcore, nous avons un autre problème si vous souhaitez "préserver" l'expérience utilisateur, car les terminaux ont des couleurs différentes sur chaque système d'exploitation.

Je crée une bibliothèque qui résout ce problème avec le format de texte: couleurs, alignement et beaucoup plus. N'hésitez pas à utiliser et à contribuer.

https://github.com/deinsoftware/colorify/ et également disponible en tant que package NuGet

Couleurs pour Windows/Linux (sombre):
enter image description here

Couleurs pour MacOS (Light):
enter image description here

10
equiman

Juste pour ajouter aux réponses ci-dessus que tous utilisent Console.WriteLine: pour changer de couleur sur la même ligne de texte, écrivez par exemple:

Console.Write("This test ");
Console.BackgroundColor = bTestSuccess ? ConsoleColor.DarkGreen : ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine((bTestSuccess ? "PASSED" : "FAILED"));
Console.ResetColor();
4
Daap

Oui c'est possible comme suit. Ces couleurs peuvent être utilisées dans une application console pour afficher certaines erreurs en couleur rouge, etc.

Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;//after this line every text will be white on blue background
Console.WriteLine("White on blue.");
Console.WriteLine("Another line.");
Console.ResetColor();//reset to the defoult colour
2
Chamila Maddumage