Odpowiedzi:
Tak. Zobacz ten artykuł . Oto przykład stamtąd:
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();
}
}
Zabrano stąd .
Powyższe komentarze to solidne odpowiedzi, jednak należy pamiętać, że nie są one bezpieczne dla wątków. Jeśli piszesz do konsoli z wieloma wątkami, zmiana kolorów doda warunek wyścigu, który może stworzyć dziwnie wyglądający wynik. Łatwo to jednak naprawić:
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
połączenie nie będzie zniekształcone. Zobacz stackoverflow.com/questions/4812508/… . To tylko kolejność wywołań zapisu, co nie jest „bezpieczne”.
Stworzyłem małą wtyczkę (dostępną na NuGet ), która pozwala na dodawanie dowolnych kolor (jeśli jest obsługiwany przez terminal) do wyjścia konsoli, bez ograniczeń klasycznych rozwiązań.
Działa poprzez rozszerzenie String
obiektu, a składnia jest bardzo prosta:
"colorize me".Pastel("#1E90FF");
Obsługiwane są zarówno kolory pierwszego planu, jak i tła.
Tak, to łatwe i możliwe. Zdefiniuj pierwsze domyślne kolory.
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.White;
Console.Clear();
Console.Clear()
jest to ważne, aby ustawić nowe kolory konsoli. Jeśli nie wykonasz tego kroku, zobaczysz połączone kolory, gdy poprosisz o wartości za pomocą Console.ReadLine()
.
Następnie możesz zmienić kolory na każdym wydruku:
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Red text over black.");
Po zakończeniu programu pamiętaj, aby po zakończeniu zresetować kolory konsoli:
Console.ResetColor();
Console.Clear();
Teraz z netcore mamy kolejny problem, jeśli chcesz „zachować” wrażenia użytkownika, ponieważ terminal ma różne kolory w każdym systemie operacyjnym.
Tworzę bibliotekę, która rozwiązuje ten problem z formatem tekstu: kolory, wyrównanie i wiele więcej. Zapraszam do korzystania i przyczyniania się.
https://github.com/deinsoftware/colorify/, a także dostępny jako pakiet NuGet
Aby dodać do powyższych odpowiedzi, których wszyscy używają Console.WriteLine
: aby zmienić kolor w tym samym wierszu tekstu, napisz na przykład:
Console.Write("This test ");
Console.BackgroundColor = bTestSuccess ? ConsoleColor.DarkGreen : ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine((bTestSuccess ? "PASSED" : "FAILED"));
Console.ResetColor();
Tak, jest to możliwe w następujący sposób. Te kolory mogą być używane w aplikacji konsolowej do wyświetlania niektórych błędów w kolorze czerwonym itp.
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
Oto prosta metoda, którą napisałem do pisania komunikatów konsoli z wbudowanymi zmianami kolorów. Obsługuje tylko jeden kolor, ale pasuje do moich potrzeb.
// 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();
}