क्या .NET में रंग में सांत्वना लिखना संभव है?


184

एक छोटी कमांड लाइन टूल लिखना, विभिन्न रंगों में आउटपुट करना अच्छा होगा। क्या यह संभव है?

जवाबों:


247

हाँ। इस लेख को देखें । यहाँ एक उदाहरण है:

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

यहां छवि विवरण दर्ज करें


3
क्या पृष्ठभूमि छवि जोड़ना संभव है?
रोलल

@RollRoll डिफ़ॉल्ट cmd.exe में नहीं है। आप एक कंसोल एमुलेटर का उपयोग करने का प्रयास कर सकते हैं, हालांकि, जो बैकग्राउंड इमेज को ट्वीक करने का समर्थन करता है, लेकिन फिर भी, इसे वैसे भी प्रोग्रामैटिकली नहीं किया जा सकता है।
रेमीगिउस श्योदा

+1 जब आप यह सामान 10 साल से अधिक समय से कर रहे हैं और अभी सीखे हैं कि वे 10 साल पहले क्या जानते थे .... यह कभी पुराना नहीं होता, हा।
जेस्टर


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
तुल्यकालन के बिना कई थ्रेड्स से लिखने के परिणामस्वरूप गारबल्ड आउटपुट होगा भले ही कोई रंग परिवर्तन न हो: यह सिर्फ रंग नहीं बदल रहा है जो एक दौड़ की स्थिति का कारण बनता है
जो

6
@ जोए एक Writeकॉल कॉल नहीं होगी । Stackoverflow.com/questions/4812508/… देखें । यह केवल लिखने-पुकार का क्रम है जो "सुरक्षित" नहीं है।
बैटरीबैकअप यूनीट

27

मैंने एक छोटा सा प्लगइन बनाया है ( नुगेट पर उपलब्ध ) जो आपको क्लासिक कंसोल की सीमाओं के बिना, आपके कंसोल आउटपुट में किसी भी (यदि आपके टर्मिनल द्वारा समर्थित) रंग जोड़ने की अनुमति देता है ।

यह 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 पैकेज के रूप में भी उपलब्ध है

विंडोज / लिनक्स (डार्क) के लिए रंग:
यहां छवि विवरण दर्ज करें

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

    }

इनलाइन रंग परिवर्तनों के साथ एक कंसोल संदेश की छवि

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.