是否可以在.NET中以彩色写入控制台?

时间:2010-04-30 08:40:15

标签: c# .net vb.net colors

编写一个小命令行工具,以不同颜色输出会很不错。这可能吗?

10 个答案:

答案 0 :(得分:199)

是。见article。这是一个例子:

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

enter image description here

答案 1 :(得分:98)

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

取自here

答案 2 :(得分:45)

以上评论都是可靠的回复,但请注意它们不是线程安全的。如果您使用多个线程写入控制台,更改颜色将添加一个竞争条件,可以创建一些奇怪的输出。虽然修复起来很简单:

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

答案 3 :(得分:11)

我创建了一个small plugin(可在NuGet上使用),您可以在控制台输出中添加任何(如果终端支持)颜色,而无需添加经典解决方案的局限性。

它通过扩展valid = countIn(Object.values(input)); function countIn(array){ var count = 0; for(var i = 0; i < array.length; ++i){ if(array[i] == true) count++; }; if (count <= 3){ return true } else{ return false } } } 对象而起作用,语法非常简单:

String

支持前景色和背景色。

enter image description here

答案 4 :(得分: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,如果你想要保留&#34;用户体验因为终端在每个操作系统上都有不同的颜色。

我正在制作一个用文本格式解决这个问题的库:颜色,对齐等等。随意使用和贡献。

https://github.com/deinsoftware/colorify/也可以NuGet package

Windows / Linux的颜色(深色):
enter image description here

MacOS(Light)的颜色:
enter image description here

答案 5 :(得分:3)

这是我编写的一种简单方法,用于编写带有内联颜色更改的控制台消息。它仅支持一种颜色,但符合我的需求。

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

    }

image of a console message with inline color changes

答案 6 :(得分: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

答案 7 :(得分:1)

只需在上面的答案中都使用Console.WriteLine:在同一行文本上更改颜色,例如:

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

答案 8 :(得分:1)

同时为多个单词着色的示例方法。

private static void WriteColor(string str, params (string substring, ConsoleColor color)[] colors)
{
    var words = Regex.Split(str, @"( )");

    foreach (var word in words)
    {
        (string substring, ConsoleColor color) cl = colors.FirstOrDefault(x => x.substring.Equals("{" + word + "}"));
        if (cl.substring != null)
        {
            Console.ForegroundColor = cl.color;
            Console.Write(cl.substring.Substring(1, cl.substring.Length - 2));
            Console.ResetColor();
        }
        else
        {
            Console.Write(word);
        }
    }
}

用法:

WriteColor("This is my message with new color with red", ("{message}", ConsoleColor.Red), ("{with}", ConsoleColor.Blue));

输出:

enter image description here

答案 9 :(得分:0)

当我想使用 Console.WriteLine(); 时,我确实只想调整文本颜色 所以我不得不写

Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.WriteLine("my message");
Console.ResetColor();

每次我想写点东西

所以我发明了我的 WriteLine() 方法并继续在 Program 类中使用它而不是 Console.WriteLine()

public static void WriteLine(string buffer, ConsoleColor foreground = ConsoleColor.DarkGreen, ConsoleColor backgroundColor = ConsoleColor.Black)
{
   Console.ForegroundColor = foreground;
   Console.BackgroundColor = backgroundColor;
   Console.WriteLine(buffer);
   Console.ResetColor();
}

为了使它更容易,我还编写了一个 Readline() 方法,如下所示:

public static string ReadLine()
{
   var line = Console.ReadLine();
   return line ?? string.Empty;
}

所以现在我们必须在控制台中写入或读取一些东西:

static void Main(string[] args) {
   WriteLine("hello this is a colored text");
   var answer = Readline();
}