¿Es posible escribir en la consola en color en .NET?


184

Al escribir una pequeña herramienta de línea de comando, sería bueno imprimir en diferentes colores. es posible?

Respuestas:


247

Si. Ver este artículo . Aquí hay un ejemplo a partir de ahí:

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

ingrese la descripción de la imagen aquí


3
¿Es posible agregar una imagen de fondo?
RollRoll

@RollRoll no está en el cmd.exe predeterminado. Sin embargo, puede intentar usar un emulador de consola, que admite ajustes de imagen de fondo, pero aún así, no se puede hacer programáticamente.
Remigiusz Schoida

+1 Cuando has estado haciendo esto durante más de 10 años y recién ahora aprendiste lo que sabían hace 10 años ... esto nunca pasa de moda, ja.
Bufón

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

Tomado de aquí .


54

Los comentarios anteriores son respuestas sólidas, sin embargo, tenga en cuenta que no son seguros para subprocesos. Si está escribiendo en la consola con varios subprocesos, el cambio de colores agregará una condición de carrera que puede crear una salida de aspecto extraño. Sin embargo, es fácil de solucionar:

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

10
Escribir desde varios subprocesos sin sincronización dará como resultado una salida confusa, incluso si no hay cambios de color: no es solo el cambio de colores lo que causa una condición de carrera
Joe

66
@ Joe Una sola Writellamada no será confusa. Ver stackoverflow.com/questions/4812508/… . Es solo el orden de las llamadas de escritura que no es "seguro".
BatteryBackupUnit

27

Creé un pequeño complemento (disponible en NuGet ) que le permite agregar cualquier color (si es compatible con su terminal) a la salida de su consola, sin las limitaciones de las soluciones clásicas.

Funciona extendiendo el Stringobjeto y la sintaxis es muy simple:

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

Se admiten los colores de primer plano y de fondo.

ingrese la descripción de la imagen aquí


1
Esta es una pieza de código realmente sorprendente. Agradezco la opción de desactivar básicamente la extensión de color completo. Se adapta al uso de la opción de color en Linux (ls –color = auto).
MianenCZ

13

Sí, es fácil y posible. Defina los primeros colores predeterminados.

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

Console.Clear()Es importante para establecer nuevos colores de consola. Si no realiza este paso, puede ver los colores combinados cuando solicite valores con Console.ReadLine().

Luego puede cambiar los colores en cada impresión:

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

Cuando finalice su programa, recuerde restablecer los colores de la consola al finalizar:

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

Ahora con netcore tenemos otro problema si desea "preservar" la experiencia del Usuario porque los terminales tienen diferentes colores en cada Sistema Operativo.

Estoy haciendo una biblioteca que resuelve este problema con el formato de texto: colores, alineación y mucho más. Siéntase libre de usar y contribuir.

https://github.com/deinsoftware/colorify/ y también disponible como paquete NuGet

Colores para Windows / Linux (oscuro):
ingrese la descripción de la imagen aquí

Colores para MacOS (claro):
ingrese la descripción de la imagen aquí


6

Solo para agregar a las respuestas anteriores que todos usan Console.WriteLine: para cambiar el color en la misma línea de texto, escriba, por ejemplo:

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

4

Sí, es posible de la siguiente manera. Estos colores se pueden usar en una aplicación de consola para ver algunos errores en color rojo, 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

3

Aquí hay un método simple que escribí para escribir mensajes de consola con cambios de color en línea. Solo admite un color, pero se ajusta a mis necesidades.

    // usage: WriteColor("This is my [message] with inline [color] changes.", ConsoleColor.Yellow);
    static void WriteColor(string message, ConsoleColor color)
    {

        var pieces = Regex.Split(message, @"(\[[^\]]*\])");

        for(int i=0;i<pieces.Length;i++)
        {
            string piece = pieces[i];

            if (piece.StartsWith("[") && piece.EndsWith("]"))
            {
                Console.ForegroundColor = color;
                piece = piece.Substring(1,piece.Length-2);          
            }

            Console.Write(piece);
            Console.ResetColor();

        }

        Console.WriteLine();

    }

imagen de un mensaje de consola con cambios de color en línea

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.