การเขียนเครื่องมือบรรทัดคำสั่งขนาดเล็กมันจะดีที่จะออกในสีที่ต่างกัน เป็นไปได้ไหม
การเขียนเครื่องมือบรรทัดคำสั่งขนาดเล็กมันจะดีที่จะออกในสีที่ต่างกัน เป็นไปได้ไหม
คำตอบ:
ใช่. ดูนี้บทความ นี่คือตัวอย่างจากที่นั่น:
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("White on blue.");
class Program
{
static void Main()
{
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("White on blue.");
Console.WriteLine("Another line.");
Console.ResetColor();
}
}
ความคิดเห็นด้านบนมีทั้งการตอบสนองที่มั่นคงอย่างไรก็ตามโปรดทราบว่าพวกเขาไม่ได้ปลอดภัย หากคุณกำลังเขียนไปยังคอนโซลที่มีหลายเธรดการเปลี่ยนสีจะเพิ่มเงื่อนไขการแข่งขันที่สามารถสร้างผลลัพธ์ที่ดูแปลก ๆ มันง่ายที่จะแก้ไขว่า:
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();
}
}
}
Write
โทรครั้งเดียวจะไม่ถูกอ่าน ดูstackoverflow.com/questions/4812508/... มันเป็นเพียงคำสั่งของการเขียนเรียกซึ่งไม่ "ปลอดภัย"
ฉันได้สร้างปลั๊กอินขนาดเล็ก (มีให้บริการบนNuGet ) ที่ช่วยให้คุณเพิ่มสีใด ๆ (ถ้ารองรับโดยเทอร์มินัลของคุณ) ลงในเอาต์พุตคอนโซลของคุณโดยไม่มีข้อ จำกัด ของโซลูชันแบบคลาสสิก
มันทำงานโดยการขยายString
วัตถุและไวยากรณ์ง่ายมาก:
"colorize me".Pastel("#1E90FF");
รองรับทั้งสีพื้นหน้าและสีพื้นหลัง
ใช่มันง่ายและ posible กำหนดสีเริ่มต้นแรก
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
เพียงเพิ่มคำตอบข้างต้นที่ใช้ทั้งหมดConsole.WriteLine
: เพื่อเปลี่ยนสีในบรรทัดข้อความเดียวกันเขียนเช่น:
Console.Write("This test ");
Console.BackgroundColor = bTestSuccess ? ConsoleColor.DarkGreen : ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine((bTestSuccess ? "PASSED" : "FAILED"));
Console.ResetColor();
ใช่มันเป็นไปได้ดังต่อไปนี้ สีเหล่านี้สามารถใช้ในแอปพลิเคชันคอนโซลเพื่อดูข้อผิดพลาดบางอย่างในสีแดง ฯลฯ
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
นี่เป็นวิธีง่าย ๆ ที่ฉันเขียนเพื่อเขียนข้อความคอนโซลด้วยการเปลี่ยนสีแบบอินไลน์ รองรับเพียงสีเดียว แต่เหมาะกับความต้องการของฉัน
// 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();
}