Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Farben in der Konsole
AyrA
myCSharp.de - Member

Avatar #avatar-3186.png


Dabei seit:
Beiträge: 60
Herkunft: Schweiz

Themenstarter:

Farben in der Konsole

beantworten | zitieren | melden

Beschreibung:

meiner Meinung nach fehlt im .NET Framework die Fähigkeit Konsolentext farbig auszugeben. Die Implementierung über Console.ForegroundColor ist mir zu aufwändig, insbesondere, wenn ich eigentlich gerne mehrere Farben auf einer Zeile ausgeben möchte.
ich mag Konsolen Anwendungen nach wie vor, da sie einfaches Scripting erlauben, Fehlermeldungen oder ähnliches möchte ich dennoch gerne farblich hervorheben, ohne jedesmal irgendwelche Funktionen zu schreiben, die dann trotzdem in einem anderen Projekt nicht mehr passen.

Ich habe daher zwei Funktionen geschrieben, die die nervtötende Arbeit des Farbensetzens abnehmen.

Klasse


using System;
using System.Globalization;

namespace AyrA
{
    /// <summary>
    /// Bietet einfachen Zugriff um Text farbig darzustellen in der Konsole.
    /// </summary>
    public static class PrintColor
    {
        /// <summary>
        /// Gibt die Konsolenfarben zurück, hexadezimal sortiert, von 0-F
        /// </summary>
        public static ConsoleColor[] ColorRow
        {
            get
            {
                ConsoleColor[] c = new ConsoleColor[16];
                for (int i = 0; i < 16; i++)
                {
                    c[i] = (ConsoleColor)i;
                }
                return c;
            }
        }

        /// <summary>
        /// Schreibt eine Zeile mit farbigem Text, inklusive Zeilenumbruch
        /// </summary>
        /// <param name="text">Zu schreibender Text</param>
        /// <param name="mapF">Vordergrundfarben</param>
        /// <param name="mapB">Hintergrundfarben</param>
        public static void printColorL(string text, string mapF, string mapB)
        {
            printColor(text, mapF, mapB);
            Console.WriteLine();
        }

        /// <summary>
        /// Schreibt eine Zeile mit farbigem Text
        /// </summary>
        /// <param name="text">Zu schreibender Text</param>
        /// <param name="mapF">Vordergrundfarben</param>
        /// <param name="mapB">Hintergrundfarben</param>
        public static void printColor(string text, string mapF, string mapB)
        {
            int color=0;

            mapF = mapF.ToUpper().Replace(' ', '_');
            mapB = mapB.ToUpper().Replace(' ', '_');

            if (text.Length != mapF.Length || mapF.Length != mapB.Length)
            {
                throw new Exception("Alle Parameter müssen die selbe Textlänge aufweisen");
            }

            for (int i = 0; i < text.Length; i++)
            {
                if (mapF[i] != '_')
                {
                    if (!int.TryParse(mapF.Substring(i, 1), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out color))
                    {
                        throw new Exception(string.Format("Vordergrundfarbe an Position {0} ungültig. Ist: '{1}'", i, mapF[i]));
                    }
                }
                if (mapB[i] != '_')
                {
                    if (!int.TryParse(mapB.Substring(i, 1), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out color))
                    {
                        throw new Exception(string.Format("Hintergrundfarbe an Position {0} ungültig. Ist: '{1}'", i, mapF[i]));
                    }
                }
            }


            ConsoleColor[] C = new ConsoleColor[] { Console.ForegroundColor, Console.BackgroundColor };
            for (int i = 0; i < text.Length; i++)
            {
                if (mapF[i] != '_')
                {
                    Console.ForegroundColor = (ConsoleColor)int.Parse(mapF.Substring(i, 1), NumberStyles.HexNumber);
                }
                if (mapB[i] != '_')
                {
                    Console.BackgroundColor= (ConsoleColor)int.Parse(mapB.Substring(i, 1), NumberStyles.HexNumber);
                }
                Console.Write(text[i]);
            }
            Console.ForegroundColor = C[0];
            Console.BackgroundColor = C[1];
        }

    }
}


Beispiel eines Aufrufes (Ergebins, siehe Bild):


PrintColor.printColorL("Long Form:  target = ulong.MaxValue / ((payload.Length + addBytes + 8) * POW)",
                       "8___________C______F_E______________F___A______________F_9________F______D__F",
                       "0____________________________________________________________________________");
PrintColor.printColorL("Short Form: X = A / ((B + C + D) * E)",
                       "8___________C_F_E_F_F_A_F_9_F_F____DF",
                       "0____________________________________");
Durch Verwendung von mehreren Zeilen, wird die Funktion fast selbsterklärend,
ansonsten hier die Anleitung:
der erste Parameter ist jeweils die Zeichenkette.
Parameter Zwei ist das Mapping der Vordergrundfarben.
Parameter Drei ist analog für die Hintergrundfarbe.

Alle Strings müssen die selbe Länge aufweisen.
Die Farben werden hexadezimal von 0-F angegeben, Gross- und Kleinschreibung ist egal.
Der unterstrich (_) (auch Leerschlag ist erlaubt) wiederholt die vorherige Farbe.
Die Zuordnung von Farben zu Zahlen kann mit dem property ColorRow überprüft werden.
Ansonsten hier die Farbtabelle:
0 = Schwarz        8 = Dunkelgrau
1 = Dunkelblau     9 = Blau
2 = Dunkelgrün     A = Grün
3 = Blaugrün       B = Zyan
4 = Dunkelrot      C = Rot
5 = Lila           D = Magenta
6 = Ocker          E = Gelb
7 = Hellgrau       F = Weiß
Diese ist übrigens von dem Befehl COLOR /?
Die Farben sind aber kompatibel

Hinweis. Anstelle des Unterstrichs darf natürlich auch die Farbkonstante wiederholend angegeben werden.

Schlagwörter: Konsole CMD dos farbig Farbe Text schreiben farbiger
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von AyrA am .
Attachments
AyrA.ch
Free Stuff

If you can read this you tried to select my Signature or have another Theme installed
private Nachricht | Beiträge des Benutzers