ConsoleHelper-Klasse

Funktionen für komfortable Ein- und Ausgaben in Konsolenanwendungen. Beinhaltet u. a. Prüfungen der Umgebung, einen Fortschrittsbalken, Cursorsteuerung und Ausgabe mit Zeilenumbruch.

Konsolenfenster sind oft langweilig. Dabei kann man dort mehr als nur grauen Text nacheinander anzeigen. Beginnend mit Farben, Cursorsteuerung zu bestimmten Positionen, über einen animierten Fortschrittsbalken bis zu gut lesbarem Text-Layout ist eine Menge möglich. Prüfungen der aktuellen Umgebung ermöglichen es, sinnvolle Entscheidungen über Art und Umfang von Ausgaben zu treffen.

Diese ConsoleHelper-Klasse bietet Methoden, die in der Console-Klasse des .NET-Frameworks noch fehlen. Das Beispiel beschreibt die Möglichkeiten und kann zum eigenen Ausprobieren verwendet werden.

Kompatibilität: .NET Ab Version 4.0

Beispiel

Das folgende Beispiel zeigt die verschiedenen Anwendungsmöglichkeiten von ConsoleHelper:

public static int Main()
{
    // Nicht unterstützte Zeichenkodierung für exotische Sprachen auf en-US zurücksetzen
    ConsoleHelper.FixEncoding();
   
    // Meldung dort ausgeben, wo der Benutzer sie sehen kann
    if (ConsoleHelper.IsInteractiveAndVisible)
    {
        // Konsolenfenster ist sichtbar, Text mit Farbe ausgeben
        ConsoleHelper.WriteLine("Hallo Konsole.", ConsoleColor.Red);
    }
    else
    {
        // Konsolenfenster ist nicht sichtbar, andere Ausgabe wählen (Nicht-interaktive
        // Sitzung, kein Konsolenfenster verwendet oder Ausgabe umgeleitet)
        MessageBox.Show("Hallo Fenster.");
    }

    // Interaktion nur, wenn sie möglich ist
    if (!ConsoleHelper.IsInputRedirected)
    {
        Console.Write("Geben Sie Ihren Namen ein: ");
        Console.ReadLine();
    }
   
    // Cursor verschieben und Zeile löschen
    Console.Write("Ihr Name ist:");
    ConsoleHelper.MoveCursor(-4);
    Console.Write("wird noch geprüft...");
    ConsoleHelper.ClearLine();   // Ach, ist auch egal.
   
    // Fortschrittsanzeige nur, wenn die Ausgabe interaktiv ist und überschrieben
    // werden kann. Sonst landen alle Zwischenbilder ebenfalls irgendwie in der Datei,
    // in die umgeleitet wird.
    if (!ConsoleHelper.IsOutputRedirected)
    {
        // Fortschrittsbalken aktivieren und regelmäßig aktualisieren
        ConsoleHelper.ProgressTitle = "Herunterladen";
        ConsoleHelper.ProgressTotal = 10;
        for (int i = 0; i <= 10; i++)
        {
            ConsoleHelper.ProgressValue = i;
            Thread.Sleep(500);
            // Warn- und Fehlerzustand wird farblich dargestellt (gelb/rot statt grün)
            if (i >= 5)
            {
                ConsoleHelper.ProgressHasWarning = true;
            }
            if (i >= 8)
            {
                ConsoleHelper.ProgressHasError = true;
            }
        }
        // Fortschrittsbalken wieder löschen
        ConsoleHelper.ProgressTotal = 0;
    }
   
    // Langen Text mit richtigem Zeilenumbruch an ganzen Wörtern anzeigen
    ConsoleHelper.WriteWrapped("Dieser sehr lange Text muss am rechten Rand des Konsolenfensters umgebrochen werden. Dabei sollen aber nicht einfach Wörter da zerrissen werden, wo das Fenster zuende ist, sondern das Wort, das nicht mehr in die Zeile passt, vollständig in der nächsten Zeile erscheinen. Dafür wird die tatsächliche Breite des Fensters beachtet.");

    ConsoleHelper.WriteWrapped("Das funktioniert auch für tabellenartige Ausgaben wie die Auflistung von Kommandozeilenparametern:");

    // Zeilenumbruch für tabellenartige Ausgaben
    ConsoleHelper.WriteWrapped("  /a    Nur ganz kurz.", true);
    ConsoleHelper.WriteWrapped("  /b    Der Text in folgenden Zeilen wird so umgebrochen, dass er unter der letzten Spalte (also dieser Beschreibung) fortgesetzt wird. Das wird am letzten Vorkommen von zwei Leerzeichen erkannt.", true);
    ConsoleHelper.WriteWrapped("  /cde  Nichts besonderes mehr.", true);
   
    // Eingabepuffer leeren, um keine vorzeitigen Eingaben auszuwerten
    ConsoleHelper.ClearKeyBuffer();
    // Bestätigungsmeldung mit Timeout (15 Sekunden) und verschwindenden Punkten anzeigen
    ConsoleHelper.Wait("Alles gelesen?", 15, true);
   
    // Einfaches Warten auf eine beliebige Taste (nicht Strg, Umschalt, NumLock, Stumm…)
    ConsoleHelper.Wait();
   
    // Verhindern, dass das Konsolenfenster bei Debugger-Ausführung in Visual Studio
    // nach dem Programmende sofort verschwindet. Ohne Debugger wartet Visual Studio
    // auch selbst. Dieses Verhalten wird hiermit angeglichen.
    ConsoleHelper.WaitIfDebug();
   
    // Rote Fehlermeldung anzeigen und Prozess mit Rückgabecode (12) beenden
    return ConsoleHelper.ExitError("Alles ist schiefgegangen!", 12);
}

Download

ConsoleHelper.cs22,9 KiBQuelltext der ConsoleHelper-Klasse

Änderungen

2015Feb8
  • ExitError method writes to stderr instead of stdin
  • Added temporary text coloring support with the ConsoleColorScope (IDisposable) class
2015Feb2
  • Fixed line wrapping bug
  • Added custom control character support for partial text coloring

Lizenz und Nutzungsbedingungen

Vervielfältigung und Weiterverbreitung dieser Datei, verändert oder unverändert, sind gestattet, vorausgesetzt die Urheberrechtsangabe und dieser Hinweis bleiben erhalten. Diese Datei wird wie vorliegend ohne jegliche Garantie oder Gewährleistung angeboten. (GNU All-Permissive-Lizenz)

Statistische Daten

  • Erstellt am 2013-11-08, aktualisiert am 2015-02-08.
  • Ca. 500 Codezeilen, geschätzte Ent­wick­lungs­kos­ten: 500 - 2 000 €