Можно ли писать в консоль в цвете в .NET?

138

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

Теги:
colors

6 ответов

168
Лучший ответ

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

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

Изображение 7843

  • 3
    Можно ли добавить фоновое изображение?
  • 0
    @RollRoll не входит в стандартный cmd.exe. Вы можете попробовать использовать консольный эмулятор, который поддерживает настройку фонового изображения, но, тем не менее, это не может быть сделано программно в любом случае.
84
class Program
{
    static void Main()
    {
        Console.BackgroundColor = ConsoleColor.Blue;
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine("White on blue.");
        Console.WriteLine("Another line.");
        Console.ResetColor();
    }
}

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

  • 40
    Console.ResetColor() было отличным дополнением ...
39

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

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();
        }
    }
}
  • 7
    Запись из нескольких потоков без синхронизации приведет к искаженному выводу, даже если нет изменений цвета: не только изменение цветов вызывает состояние гонки
  • 5
    @Joe Один вызов Write не будет искажен. См. Stackoverflow.com/questions/4812508/… . Это просто порядок записи вызовов, который не является «безопасным».
8

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

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 (Dark):
Изображение 7844

Цвета для MacOS (Light):
Изображение 7845

2

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

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

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

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

Изображение 7846

2

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню