Có thể ghi vào bảng điều khiển màu trong .NET?


183

Viết một công cụ dòng lệnh nhỏ, sẽ rất tuyệt khi xuất ra các màu khác nhau. Điều này có thể không?

Câu trả lời:


245

Đúng. Xem bài viết này . Đây là một ví dụ từ đó:

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

nhập mô tả hình ảnh ở đây


3
Có thể thêm hình nền?
RollRoll

@RollRoll không có trong cmd.exe mặc định. Mặc dù vậy, bạn có thể thử sử dụng trình giả lập Console, hỗ trợ chỉnh sửa ảnh nền, nhưng dù sao, nó vẫn không thể được thực hiện theo chương trình.
Remigiusz Schoida

+1 Khi bạn đã làm công cụ này trong hơn 10 năm và bây giờ mới biết những gì họ biết 10 năm trước .... điều này không bao giờ cũ, ha.
Jester

114
class Program
{
    static void Main()
    {
        Console.BackgroundColor = ConsoleColor.Blue;
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine("White on blue.");
        Console.WriteLine("Another line.");
        Console.ResetColor();
    }
}

Lấy từ đây .


54

Nhận xét trên là cả hai phản hồi chắc chắn, tuy nhiên lưu ý rằng chúng không phải là chủ đề an toàn. Nếu bạn đang ghi vào bảng điều khiển với nhiều luồng, việc thay đổi màu sẽ thêm một điều kiện cuộc đua có thể tạo ra một số kết quả trông lạ. Nó là đơn giản để sửa chữa mặc dù:

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
Viết từ nhiều luồng mà không đồng bộ hóa sẽ dẫn đến đầu ra bị cắt xén ngay cả khi không có thay đổi màu: đó không chỉ là thay đổi màu gây ra tình trạng cuộc đua
Joe

6
@Joe Một Writecuộc gọi sẽ không bị cắt xén. Xem stackoverflow.com/questions/4812508/ Lần . Đó chỉ là thứ tự của các cuộc gọi viết không "an toàn".
BatteryBackupUnit

27

Tôi đã tạo một plugin nhỏ (có sẵn trên NuGet ) cho phép bạn thêm bất kỳ màu nào (nếu được thiết bị đầu cuối hỗ trợ) vào đầu ra giao diện điều khiển của bạn, mà không có giới hạn của các giải pháp cổ điển.

Nó hoạt động bằng cách mở rộng Stringđối tượng và cú pháp rất đơn giản:

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

Cả hai màu nền trước và sau đều được hỗ trợ.

nhập mô tả hình ảnh ở đây


1
Đây thực sự là một đoạn mã tuyệt vời. Tôi đánh giá cao tùy chọn để hủy kích hoạt toàn bộ phần mở rộng màu. Nó phù hợp với việc sử dụng tùy chọn màu trong linux (lsTHERcolor = auto).
MianenCZ

13

Vâng, nó dễ dàng và rõ ràng. Xác định màu mặc định đầu tiên.

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

Console.Clear()nó quan trọng để thiết lập màu giao diện điều khiển mới. Nếu bạn không thực hiện bước này, bạn có thể thấy các màu kết hợp khi yêu cầu giá trị với Console.ReadLine().

Sau đó, bạn có thể thay đổi màu sắc trên mỗi bản in:

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

Khi kết thúc chương trình của bạn, hãy nhớ đặt lại màu bảng điều khiển khi kết thúc:

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

Bây giờ với netcore, chúng tôi có một vấn đề khác nếu bạn muốn "bảo tồn" trải nghiệm Người dùng vì thiết bị đầu cuối có màu khác nhau trên mỗi Hệ điều hành.

Tôi đang tạo một thư viện giải quyết vấn đề này với Định dạng văn bản: màu sắc, căn chỉnh và nhiều hơn nữa. Hãy sử dụng và đóng góp.

https://github.com/deinsoftware/colorify/ và cũng có sẵn dưới dạng gói NuGet

Màu sắc cho Windows / Linux (Tối):
nhập mô tả hình ảnh ở đây

Màu sắc cho MacOS (Ánh sáng):
nhập mô tả hình ảnh ở đây


6

Chỉ cần thêm vào các câu trả lời ở trên mà tất cả đều sử dụng Console.WriteLine: để thay đổi màu trên cùng một dòng văn bản, hãy viết ví dụ:

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

4

Có nó là có thể như sau. Những màu này có thể được sử dụng trong ứng dụng bảng điều khiển để xem một số lỗi về màu đỏ, v.v ...

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

Đây là một phương pháp đơn giản mà tôi đã viết để viết thông điệp bảng điều khiển với sự thay đổi màu nội tuyến. Nó chỉ hỗ trợ một màu, nhưng nó phù hợp với nhu cầu của tôi.

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

    }

hình ảnh của một thông điệp console với sự thay đổi màu nội tuyến

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.