Apakah mungkin untuk menulis ke konsol dengan warna dalam .NET?


184

Menulis alat baris perintah kecil, akan menyenangkan untuk menghasilkan warna yang berbeda. Apakah ini mungkin?

Jawaban:


247

Iya. Lihat artikel ini . Berikut ini contoh dari sana:

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

masukkan deskripsi gambar di sini


3
apakah mungkin menambahkan gambar latar belakang?
RollRoll

@ Rolloll tidak dalam cmd.exe default. Anda dapat mencoba menggunakan emulator Konsol, yang mendukung tweaking gambar latar belakang, tetapi tetap saja tidak bisa dilakukan secara terprogram.
Remigiusz Schoida

1 Ketika Anda sudah melakukan hal ini selama lebih dari 10 tahun dan hanya sekarang belajar apa yang mereka tahu 10 tahun yang lalu .... ini tidak pernah menjadi tua, ha.
Jester

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

Diambil dari sini .


54

Komentar di atas sama-sama respons yang solid, namun perhatikan bahwa komentar tersebut tidak aman. Jika Anda menulis ke konsol dengan banyak utas, mengubah warna akan menambah kondisi balapan yang dapat menghasilkan keluaran yang tampak aneh. Sangat mudah untuk memperbaikinya:

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
Menulis dari banyak utas tanpa sinkronisasi akan menghasilkan keluaran yang kacau bahkan jika tidak ada perubahan warna: itu bukan hanya mengubah warna yang menyebabkan kondisi balapan
Joe

6
@ Jo. Satu Writepanggilan tidak akan kacau. Lihat stackoverflow.com/questions/4812508/… . Hanya urutan dari panggilan tulis yang tidak "aman".
BatteryBackupUnit

27

Saya telah membuat sebuah plugin kecil (tersedia di NuGet ) yang memungkinkan Anda untuk menambahkan warna apa pun (jika didukung oleh terminal Anda) ke output konsol Anda, tanpa batasan dari solusi klasik.

Ia bekerja dengan memperluas Stringobjek dan sintaksnya sangat sederhana:

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

Warna foreground dan background didukung.

masukkan deskripsi gambar di sini


1
Ini adalah kode yang sangat luar biasa. Saya menghargai opsi untuk menonaktifkan ekstensi seluruh warna pada dasarnya. Ini sesuai dengan penggunaan opsi warna di linux (ls –color = auto).
MianenCZ

13

Ya, mudah dan posible. Tentukan warna default pertama.

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

Console.Clear()itu penting untuk mengatur warna konsol baru. Jika Anda tidak melakukan langkah ini, Anda dapat melihat warna gabungan saat meminta nilai Console.ReadLine().

Kemudian Anda dapat mengubah warna pada setiap cetakan:

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

Saat menyelesaikan program Anda, ingatlah untuk mengatur ulang warna konsol saat selesai:

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

Sekarang dengan netcore kami memiliki masalah lain jika Anda ingin "mempertahankan" pengalaman Pengguna karena terminal memiliki warna yang berbeda pada setiap Sistem Operatif.

Saya sedang membuat perpustakaan yang memecahkan masalah ini dengan Format Teks: warna, perataan dan banyak lagi. Jangan ragu untuk menggunakan dan berkontribusi.

https://github.com/deinsoftware/colorify/ dan juga tersedia sebagai paket NuGet

Warna untuk Windows / Linux (Gelap):
masukkan deskripsi gambar di sini

Warna untuk MacOS (Cahaya):
masukkan deskripsi gambar di sini


6

Hanya untuk menambahkan jawaban di atas yang semuanya gunakan Console.WriteLine: untuk mengubah warna pada baris teks yang sama, tulis misalnya:

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

4

Ya itu mungkin sebagai berikut. Warna-warna ini dapat digunakan dalam aplikasi konsol untuk melihat beberapa kesalahan dalam warna merah dll ...

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

Berikut adalah metode sederhana yang saya tulis untuk menulis pesan konsol dengan perubahan warna sebaris. Ini hanya mendukung satu warna, tetapi sesuai dengan kebutuhan saya.

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

    }

gambar pesan konsol dengan perubahan warna sebaris

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.