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:
Beispiel
Das folgende Beispiel zeigt die verschiedenen Anwendungsmöglichkeiten von ConsoleHelper:
{
// 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
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 Entwicklungskosten: 500 - 2 000 €