Konsola .NET'te renkli yazı yazmak mümkün mü?


184

Küçük bir komut satırı aracı yazarken, farklı renklerde çıktı almak güzel olurdu. Mümkün mü?

Yanıtlar:


248

Evet. Bu makaleye bakın . İşte oradan bir örnek:

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

resim açıklamasını buraya girin


3
arka plan resmi eklemek mümkün mü?
RollRoll

@RollRoll varsayılan cmd.exe içinde değil. Yine de, arka plan görüntüsü ayarını destekleyen bir Konsol öykünücüsü kullanmayı deneyebilirsiniz, ancak yine de yine de programlı olarak yapılamaz.
Remigiusz Schoida

+1 10 yılı aşkın bir süredir bu şeyleri yaparken ve şimdi 10 yıl önce bildiklerini öğrendiklerinde .... bu asla eskimez ha.
Soytarı

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

Buradan alındı .


54

Yukarıdaki yorumların her ikisi de sağlam yanıtlardır, ancak konuların güvenli olmadığını unutmayın. Konsola birden çok iş parçacığıyla yazıyorsanız, renkleri değiştirmek bazı garip görünümlü çıktılar oluşturabilecek bir yarış durumu ekleyecektir. Ancak düzeltmek kolaydır:

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
Senkronizasyon olmadan birden fazla iş parçacığından yazmak, renk değişikliği olmasa bile bozuk çıktıya neden olur: bu sadece yarış durumuna neden olan renkleri değiştirmekle kalmaz
Joe

6
@Joe Tek Writeçağrı olacak değil bozulabilir. Bkz. Stackoverflow.com/questions/4812508/… . Sadece "güvenli" olmayan yazma çağrılarının sırası.
BatteryBackupUnit

27

Ben oluşturduk küçük eklentisi (geçerli Nuget Eklemek sağlar) herhangi (sizin terminali tarafından destekleniyorsa) klasik çözümlere sınırlamaları olmadan, konsol çıkış rengini.

StringNesneyi genişleterek çalışır ve sözdizimi çok basittir:

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

Hem ön plan hem de arka plan renkleri desteklenir.

resim açıklamasını buraya girin


1
Bu gerçekten harika bir kod parçası. Temelde tüm renk uzantısını devre dışı bırakma seçeneğini takdir ediyorum. Linux'ta renk seçeneğinin kullanımına uygundur (ls –color = auto).
MianenCZ

13

Evet, kolay ve makul. İlk varsayılan renkleri tanımlayın.

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

Console.Clear()yeni konsol renkleri ayarlamak önemlidir. Bu adımı gerçekleştirmezseniz, değer istendiğinde birleştirilmiş renkleri görebilirsiniz Console.ReadLine().

Ardından her baskıdaki renkleri değiştirebilirsiniz:

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

Programınızı tamamladığınızda, bittikten sonra konsol renklerini sıfırlamayı unutmayın:

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

Artık netcore ile, Kullanıcı deneyimini "korumak" istiyorsanız, terminalin her bir İşletim Sisteminde farklı renkleri olduğu için başka bir sorunumuz var.

Metin Biçimi: renkler, hizalama ve çok daha fazlası ile bu sorunu çözen bir kütüphane yapıyorum. Kullanmaktan ve katkıda bulunmaktan çekinmeyin.

https://github.com/deinsoftware/colorify/ ve NuGet paketi olarak da mevcut

Windows / Linux için Renkler (Koyu):
resim açıklamasını buraya girin

MacOS için renkler (Işık):
resim açıklamasını buraya girin


6

Yukarıdaki tüm cevapları eklemek için Console.WriteLine: aynı metin satırındaki rengi değiştirmek için, örneğin şunu yazın:

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

4

Evet, aşağıdaki gibi mümkündür. Bu renkler, kırmızı renkte vb. Bazı hataları görüntülemek için bir konsol uygulamasında kullanılabilir ...

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

İşte satır içi renk değişiklikleriyle konsol mesajları yazmak için yazdığım basit bir yöntem. Sadece bir rengi destekliyor, ama ihtiyaçlarıma uyuyor.

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

    }

satır içi renk değişiklikleriyle konsol mesajının resmi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.