Можно ли писать на консоль в цвете в .NET? - PullRequest
155 голосов
/ 30 апреля 2010

При написании небольшого инструмента командной строки было бы неплохо выводить его разными цветами. Возможно ли это?

Ответы [ 7 ]

207 голосов
/ 30 апреля 2010

Да. Смотрите эту статью . Вот пример оттуда:

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

enter image description here

102 голосов
/ 30 апреля 2010
class Program
{
    static void Main()
    {
        Console.BackgroundColor = ConsoleColor.Blue;
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine("White on blue.");
        Console.WriteLine("Another line.");
        Console.ResetColor();
    }
}

Взято из здесь .

45 голосов
/ 19 января 2016

Над комментариями имеются твердые ответы, однако обратите внимание, что они не являются поточно-ориентированными. Если вы пишете на консоль с несколькими потоками, изменение цвета добавит условие гонки, которое может создать какой-то странный результат. Это легко исправить, хотя:

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();
        }
    }
}
12 голосов
/ 05 декабря 2018

Я создал маленький плагин (доступен на NuGet ), который позволяет вам добавить любой (если поддерживается вашим терминалом) цвет на вашу консоль вывод, без ограничений классических решений.

Он работает путем расширения объекта String, а синтаксис очень прост:

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

Поддерживаются цвета переднего плана и фона.

enter image description here

8 голосов
/ 27 декабря 2017

Да, это просто и возможно. Определите первые цвета по умолчанию.

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

Console.Clear() важно установить новые цвета консоли. Если вы не сделаете этот шаг, вы можете увидеть комбинированные цвета при запросе значений с Console.ReadLine().

Затем вы можете изменить цвета на каждом отпечатке:

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

Когда закончите свою программу, не забудьте сбросить цвета консоли по окончании:

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

Теперь с netcore у нас есть другая проблема, если вы хотите «сохранить» пользовательский интерфейс, потому что терминалы имеют разные цвета в каждой операционной системе.

Я создаю библиотеку, которая решает эту проблему с помощью Text Format: цвета, выравнивание и многое другое. Не стесняйтесь использовать и внести свой вклад.

https://github.com/deinsoftware/colorify/, а также доступны в виде NuGet пакет

Цвета для Windows / Linux (темные):
enter image description here

Цвета для MacOS (Light):
enter image description here

2 голосов
/ 09 мая 2019

Просто чтобы добавить к ответам выше, что все используют Console.WriteLine: чтобы изменить цвет в той же строке текста, напишите, например:

Console.Write("This test ");
Console.BackgroundColor = bTestSuccess ? ConsoleColor.DarkGreen : ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine((bTestSuccess ? "PASSED" : "FAILED"));
Console.ResetColor();
2 голосов
/ 31 июля 2018

Да, это возможно следующим образом. Эти цвета можно использовать в консольном приложении для просмотра ошибок красного цвета и т. Д. *

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...