.NET에서 콘솔에 컬러로 쓸 수 있습니까?


184

작은 명령 줄 도구를 작성하면 다른 색상으로 출력하는 것이 좋습니다. 이게 가능해?

답변:


247

예. 이 기사를 참조 하십시오 . 다음은 그 예입니다.

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

여기에 이미지 설명을 입력하십시오


3
배경 이미지를 추가 할 수 있습니까?
RollRoll

@RollRoll은 기본 cmd.exe에 없습니다. 그래도 배경 이미지 조정을 지원하는 콘솔 에뮬레이터를 사용해 볼 수는 있지만 여전히 프로그래밍 방식으로 수행 할 수는 없습니다.
Remigiusz Schoida

당신이 10 년 이상이 물건을 그냥 봤는데 +1 지금 그들이 10 년 전 알고있는 것을 배웠다는 ....이, 하, 웃기죠.
광대

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

여기 에서 찍은 .


54

위의 의견은 모두 확실한 반응이지만 스레드 안전하지는 않습니다. 여러 스레드를 사용하여 콘솔에 쓰는 경우 색상을 변경하면 경이로운 출력이 생길 수있는 경쟁 조건이 추가됩니다. 그래도 고치는 것은 간단합니다.

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
동기화없이 여러 스레드에서 쓰면 색상 변경이없는 경우에도 출력이 왜곡됩니다. 경쟁 조건을 유발하는 색상 만 변경하는 것이 아닙니다.
Joe

6
@Joe 단일 Write통화가 깨지지 않습니다 . stackoverflow.com/questions/4812508/…을 참조하십시오 . "안전"하지 않은 쓰기 호출의 순서 일뿐입니다.
BatteryBackupUnit

27

내가 만든 작은 플러그인 (볼 NuGet 추가 할 수 있습니다) 어떤 (터미널에서 지원하는 경우) 고전 솔루션의 제한없이, 콘솔 출력에 색상을.

String객체 를 확장하여 작동 하며 구문은 매우 간단합니다.

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

전경색과 배경색이 모두 지원됩니다.

여기에 이미지 설명을 입력하십시오


1
이것은 정말 놀라운 코드입니다. 기본적으로 전체 색상 확장을 비활성화하는 옵션에 감사드립니다. 리눅스에서 색상 옵션을 사용하는 데 적합합니다 (ls –color = auto).
MianenCZ

13

예, 쉽고 가능합니다. 첫 번째 기본 색상을 정의하십시오.

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

netcore를 사용하면 터미널마다 각 운영 체제마다 색상이 다르기 때문에 사용자 환경을 "보존"하려는 경우 또 다른 문제가 있습니다.

텍스트 형식 (색상, 정렬 등) 으로이 문제를 해결하는 라이브러리를 만들고 있습니다. 자유롭게 사용하고 기여하십시오.

https://github.com/deinsoftware/colorify/NuGet 패키지 로도 제공

Windows / Linux 용 색상 (어두운) :
여기에 이미지 설명을 입력하십시오

MacOS 용 색상 (빛) :
여기에 이미지 설명을 입력하십시오


6

위의 답변에 모두 사용 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

예, 다음과 같이 가능합니다. 이 색상은 콘솔 응용 프로그램에서 빨간색 등의 일부 오류를 볼 수 있습니다.

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

다음은 인라인 색상 변경으로 콘솔 메시지를 작성하기 위해 작성한 간단한 방법입니다. 하나의 색상 만 지원하지만 내 요구에 맞습니다.

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

    }

인라인 색상 변경이 포함 된 콘솔 메시지 이미지

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.