Antworten:
Ja. Siehe diesen Artikel . Hier ist ein Beispiel von dort:
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("White on blue.");
class Program
{
static void Main()
{
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("White on blue.");
Console.WriteLine("Another line.");
Console.ResetColor();
}
}
Von hier genommen .
Die obigen Kommentare sind beide solide Antworten. Beachten Sie jedoch, dass sie nicht threadsicher sind. Wenn Sie mit mehreren Threads auf die Konsole schreiben, wird durch Ändern der Farben eine Race-Bedingung hinzugefügt, die zu einer seltsam aussehenden Ausgabe führen kann. Es ist jedoch einfach zu beheben:
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();
}
}
}
Write
Anruf wird nicht verstümmelt. Siehe stackoverflow.com/questions/4812508/… . Es ist nur die Reihenfolge der Schreibaufrufe, die nicht "sicher" ist.
Ich habe ein kleines Plugin (verfügbar auf NuGet ) erstellt, mit dem Sie Ihrer Konsolenausgabe eine beliebige Farbe hinzufügen können (sofern dies von Ihrem Terminal unterstützt wird), ohne die Einschränkungen der klassischen Lösungen.
Es funktioniert durch Erweitern des String
Objekts und die Syntax ist sehr einfach:
"colorize me".Pastel("#1E90FF");
Sowohl Vordergrund- als auch Hintergrundfarben werden unterstützt.
Ja, es ist einfach und möglich. Definieren Sie die ersten Standardfarben.
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.White;
Console.Clear();
Console.Clear()
Dies ist wichtig, um neue Konsolenfarben festzulegen. Wenn Sie diesen Schritt nicht ausführen, können Sie kombinierte Farben sehen, wenn Sie nach Werten mit fragen Console.ReadLine()
.
Dann können Sie die Farben auf jedem Druck ändern:
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Red text over black.");
Denken Sie nach Beendigung Ihres Programms daran, die Konsolenfarben beim Beenden zurückzusetzen:
Console.ResetColor();
Console.Clear();
Jetzt mit Netcore haben wir ein weiteres Problem, wenn Sie die Benutzererfahrung "bewahren" möchten, da das Terminal auf jedem Betriebssystem unterschiedliche Farben hat.
Ich erstelle eine Bibliothek, die dieses Problem mit dem Textformat löst: Farben, Ausrichtung und vieles mehr. Fühlen Sie sich frei zu verwenden und beizutragen.
https://github.com/deinsoftware/colorify/ und auch als NuGet-Paket verfügbar
Um die obigen Antworten zu ergänzen, die alle verwenden Console.WriteLine
: Um die Farbe in derselben Textzeile zu ändern, schreiben Sie zum Beispiel:
Console.Write("This test ");
Console.BackgroundColor = bTestSuccess ? ConsoleColor.DarkGreen : ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine((bTestSuccess ? "PASSED" : "FAILED"));
Console.ResetColor();
Ja, es ist wie folgt möglich. Diese Farben können in einer Konsolenanwendung verwendet werden, um einige Fehler in roter Farbe usw. anzuzeigen.
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
Hier ist eine einfache Methode, die ich zum Schreiben von Konsolennachrichten mit Inline-Farbänderungen geschrieben habe. Es unterstützt nur eine Farbe, aber es entspricht meinen Bedürfnissen.
// 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();
}