web-dev-qa-db-ja.com

.NETでコンソールにカラーで書き込むことはできますか?

小さなコマンドラインツールを作成する場合、異なる色で出力するのが良いでしょう。これは可能ですか?

160
NibblyPig

はい。これを参照してください 記事 。以下に例を示します。

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

enter image description here

213
Mark Byers
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 から取得。

104
Darin Dimitrov

上記のコメントはどちらも堅実な回答ですが、スレッドセーフではないことに注意してください。複数のスレッドを使用してコンソールに書き込む場合、色を変更すると競合状態が追加され、奇妙な外観の出力が作成される可能性があります。ただし、簡単に修正できます。

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

(小さなプラグインNuGet で利用可能)を作成して、追加できるようにしましたany (端末でサポートされている場合)コンソール出力の色。従来のソリューションの制限はありません。

Stringオブジェクトを拡張することで機能し、構文は非常に簡単です。

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

前景色と背景色の両方がサポートされています。

enter image description here

15
silkfire

はい、それは簡単で可能です。最初のデフォルト色を定義します。

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

ネットコアでは、端末が各オペレーティングシステムで異なる色を持っているため、ユーザーエクスペリエンスを「維持」する場合、別の問題が発生します。

この問題をテキスト形式で解決するライブラリを作成しています:色、配置など。気軽に使用して貢献してください。

https://github.com/deinsoftware/colorify/ および NuGetパッケージ としても利用可能

Windows/Linux(ダーク)の色:
enter image description here

MacOS(Light)の色:
enter image description here

10
equiman

上記の回答に加えて、すべてがConsole.WriteLine:を使用して、同じテキスト行の色を変更するには、たとえば次のように記述します。

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

はい、次のように可能です。これらの色をコンソールアプリケーションで使用して、赤色などのエラーを表示できます。

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
2