编写一个小命令行工具,以不同颜色输出会很不错。这可能吗?
答案 0 :(得分:199)
是。见article。这是一个例子:
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("White on blue.");
答案 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
支持前景色和背景色。
答案 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;用户体验因为终端在每个操作系统上都有不同的颜色。
我正在制作一个用文本格式解决这个问题的库:颜色,对齐等等。随意使用和贡献。
答案 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();
}
答案 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));
输出:
答案 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();
}