Mehrfachauswahllisten mit Gruppierungen - Spectre Console Series
Spectre Console ist eine .NET-Bibliothek, mit der Sie einfache C#-Konsolenanwendungen in visuell ansprechende, interaktive Tools verwandeln können. Anstelle von statischen Schwarz-Weiß-Bildschirmen können Sie die Benutzer mit Farben, Layouts und interaktiven Auswahlmöglichkeiten auffordern. In diesem Artikel befassen wir uns mit einer der leistungsstärksten Eingabefunktionen - den Mehrfachauswahl-Eingabeaufforderungen - und speziell mit der Verwendung von Auswahlgruppen.
Zu diesem Zweck folgen wir der Anleitung von Tim Corey aus seinem Video "Multi-Select Lists with Groupings - Spectre Console Series". Tim erklärt, zeigt Code und führt ihn aus, damit Sie sehen können, wie Sie ihn in Ihrem eigenen Projekt implementieren können. Unter jeder Überschrift ist die ungefähre Zeit angegeben, zu der das Thema im Video vorkommt, damit Sie direkt zum Thema springen können.
Einführung in das Multi-Selection Prompt
Zu Beginn des Videos erinnert Tim Corey die Zuschauer daran, dass Sie mit Spectre Console "Ihre C#-Konsolenanwendungen in visuell ansprechende, informative Anwendungen verwandeln können" (0:02). In seiner Serie wird die Bibliothek Stück für Stück in zehnminütigen Abschnitten vorgestellt. In diesem Video geht es darum, den Benutzer aufzufordern, eine oder mehrere Optionen aus einer Liste oder aus mehreren Listen mit Hilfe der Mehrfachauswahl-Eingabeaufforderung auszuwählen (0:18).
Einrichten einer einfachen Mehrfachauswahl-Eingabeaufforderung
Tim beginnt damit, zwei Listen zu zeigen, die er bereits in seinem Code hat:
List<string> usualNames = new() {
"Tim Corey",
"Sue Storm",
"Bilbo Baggins",
"John Doe",
"Princess Donut",
"Steve Rogers"
};
List<string> familyNames = new() {
"Charity",
"Jon",
"Chris"
};
List<string> usualNames = new() {
"Tim Corey",
"Sue Storm",
"Bilbo Baggins",
"John Doe",
"Princess Donut",
"Steve Rogers"
};
List<string> familyNames = new() {
"Charity",
"Jon",
"Chris"
};
(You can see these on screen at about 0:38.)
Er erstellt eine List
Tim betont, dass jede Auswahl ein String-Objekt ist und die Eingabeaufforderung ein Array oder eine Liste der vom Benutzer ausgewählten Auswahlen zurückgibt (1:20-1:26).
Anschließend fügt er einen benutzerdefinierten Titel hinzu, um den Benutzer zu führen:
.Title("Which are your favorite placeholder names?")
.Title("Which are your favorite placeholder names?")
Damit wird eine klare Überschrift am Anfang der Eingabeaufforderung gesetzt (1:31-1:50).
Hinzufügen von Anweisungstext zur Benutzerführung
Tim beschränkt sich nicht nur auf einen Titel. Außerdem fügt er Anweisungstext hinzu, um dem Benutzer zu erklären, wie er mit der Eingabeaufforderung umgehen soll (1:50).
Er schreibt etwa so:
.InstructionsText("(Press <space> to toggle, <enter> to accept)")
.InstructionsText("(Press <space> to toggle, <enter> to accept)")
Bei 1:56 erklärt er, dass man sie sogar mit Farben oder anderem Styling formatieren kann - Spectre Console unterstützt die Anpassung von Akzentfarben, so dass Ihre Anweisungen in Grün, Blau, Gelb, Grau oder Rot erscheinen können, um wichtige Teile hervorzuheben.
Der wichtigste Teil ist, dem Benutzer zu erklären: Drücken Sie die Leertaste, um zwischen den Elementen zu wechseln, drücken Sie die Eingabetaste, um Ihre Antwort zu bestätigen (2:12). Dadurch wird das Skript für den Benutzer leicht verständlich.
Hinzufügen von Auswahlmöglichkeiten und Anzeigen der Ergebnisse
Als Nächstes fügt Tim die eigentlichen Daten hinzu. Zu Beginn hält er es mit einer Liste einfach. Er verwendet .AddChoices(usualNames) (2:24-2:34).
Dann schreibt er eine unkomplizierte foreach-Schleife, um die Auswahl des Benutzers auf der Konsole auszugeben (2:38-2:52):
foreach (var name in favoriteNames)
{
Console.WriteLine(name);
}
foreach (var name in favoriteNames)
{
Console.WriteLine(name);
}
Er kümmert sich nicht um die Formatierung - er zeigt nur, dass die Mehrfachauswahl-Eingabeaufforderung funktioniert (2:53-3:00).
Tim führt das Programm auf dem Terminal aus (3:00). Die Eingabeaufforderung zeigt die Liste der Namen. Mit der Leertaste wählt er einige Begriffe aus - wie "Tim Corey" und "Sue Storm" - und drückt dann die Eingabetaste, woraufhin die Konsole die ausgewählten Optionen ausgibt (3:07-3:15). Hier sehen Sie die einfachste Arbeitsversion.

Umstellung auf mehrere Listen mit Auswahlgruppen
Nachdem die grundlegende Einrichtung funktioniert hat, macht Tim die Dinge "ein bisschen interessanter" (3:22). Statt nur einer Liste hat er zwei Listen: usualNames und familyNames.
Er kommentiert den Originalaufruf .AddChoices() und stellt .AddChoiceGroup() vor (3:32-3:38). Dies ermöglicht es ihm, verwandte Begriffe unter einem Label zu gruppieren. Er schreibt:
.AddChoiceGroup("The usual names", usualNames)
.AddChoiceGroup("Family names", familyNames)
.AddChoiceGroup("The usual names", usualNames)
.AddChoiceGroup("Family names", familyNames)
Nun wird jede Gruppe in der Eingabeaufforderung separat erscheinen. Diese Struktur ist besonders hilfreich, wenn Sie Dutzende von Optionen präsentieren und diese in Seiten oder Gruppen gliedern möchten. Die Mehrfachauswahl-Eingabeaufforderung der Spectre-Konsole verfügt über eine PageSize-Eigenschaft, mit der Sie steuern können, wie viele Elemente auf einmal angezeigt werden, wenn mehr Auswahlmöglichkeiten vorhanden sind, als auf einen Bildschirm passen, auch wenn das Transkript dies nicht zeigt.
Wie die Gruppenauswahl zur Laufzeit funktioniert
Tim speichert und führt den Code erneut aus (4:11). Die neue Eingabeaufforderung zeigt beide Gruppen mit klaren Bezeichnungen an. Wenn er den Cursor auf die Bezeichnung "Die üblichen Namen" bewegt und die Leertaste drückt, werden alle Elemente in dieser Gruppe auf einmal ausgewählt (4:17-4:19).
Er weist auch darauf hin, dass die Spectre-Konsole automatisch einen Bildlauf durchführt, wenn die Liste länger als der Bildschirm ist - Sie sehen dann eine graue Meldung mit dem Hinweis "Bewegen Sie sich nach oben und unten, um mehr Auswahlmöglichkeiten zu erhalten" (4:25-4:31). Das ist ein Standardverhalten für scrollbare Listen.
Tim zeigt, wie man zu den Familiennamen scrollt, sie auswählt und dann eine Person wie Sue Storm auswählt (4:39-4:43). Wenn er die Eingabetaste drückt, druckt die Konsole alle ausgewählten Namen zusammen aus (4:45). Hier wird gezeigt, wie die Funktion mehrere Auswahlmöglichkeiten anzeigt, die Sie umschalten können, und dann eine einzige Liste der ausgewählten Objekte zurückgibt.

Die Mehrfachauswahl-Eingabeaufforderung im Vergleich zur Auswahl-Eingabeaufforderung verstehen
Um 5:00 Uhr fasst Tim zusammen, was er gezeigt hat. Die Mehrfachauswahl-Eingabeaufforderung funktioniert wie die normale Auswahl-Eingabeaufforderung, gibt aber eine Liste des übergebenen Typs zurück (5:03-5:08).
Sie können Anweisungstexte hinzufügen, wie er es getan hat, und Sie können Auswahlgruppen verwenden, um ganze Gruppen zu organisieren und optional mit einem Tastendruck auszuwählen (5:14-5:18). Dadurch werden große oder komplexe Menüs für den Benutzer viel übersichtlicher.
Dies ist auch ein Hinweis auf die Fähigkeit von Spectre Console, mit komplexen Objekten zu arbeiten: Das Objekt Ihrer Wahl kann mehr als ein String sein. Sie können ein Objekt mit einer ChoiceLabel-Eigenschaft versehen, um zu steuern, was angezeigt wird, und gleichzeitig das vollständige Objekt zurückerhalten, wenn der Benutzer seine Antwort akzeptiert.
Flexible Verwendung von Auswahlgruppen und Bezeichnungen
Tim stellt auch klar, dass Sie nicht zwei Gruppen haben müssen, um .AddChoiceGroup() zu verwenden (5:20-5:24). Auch bei einer einzelnen Gruppe haben Sie den Vorteil, dass Sie die gesamte Gruppe auf einmal auswählen können.
Er zeigt, dass Sie die Gruppe z. B. "Select All" nennen können, um allgemeiner zu sein (5:34-5:42). Wenn Sie den obersten Eintrag auswählen, werden alle darunter liegenden Einträge umgeschaltet (5:44-5:47). Sie können auch eine farbliche Hervorhebung verwenden - zum Beispiel, indem Sie die Gruppenbeschriftung grün oder blau machen, um sie zu kennzeichnen - um den Benutzer zur Standard- oder zur gewünschten Gruppe zu führen. Dies gibt Ihnen eine große Flexibilität bei der Strukturierung Ihrer Eingabeaufforderungen.
Zusammenfassung
Tim beendet das Video mit einer Zusammenfassung: So funktioniert die Mehrfachauswahl von Eingabeaufforderungen mit Spectre Console, einschließlich des Hinzufügens von Auswahlgruppen für gruppierte Auswahl (5:50-5:53). Wie immer befindet sich der Quellcode in der Beschreibung (5:57).
Die wichtigsten Erkenntnisse aus Tim Coreys Durchgang
-
Mit der Mehrfachauswahl der Spectre-Konsole können Benutzer null, ein oder mehrere Elemente aus einer Liste auswählen.
-
Fügen Sie einen Titel und einen Anleitungstext hinzu, um die Benutzer zu führen; sie können Akzentfarben verwenden, um erforderliche Informationen hervorzuheben.
-
Verwenden Sie .AddChoices() für eine einfache Liste; verwenden Sie .AddChoiceGroup() für mehrere oder gruppierte Listen.
-
Die Benutzer drücken die Leertaste, um die Auswahl zu ändern, und die Eingabetaste, um zu akzeptieren.
-
Die Gruppenbeschriftungen selbst können umgeschaltet werden, um alle Elemente auf einmal auszuwählen.
-
Die Eingabeaufforderung kann komplexe Objekte mit einer ChoiceLabel-Eigenschaft anzeigen und gleichzeitig das zugrunde liegende Objekt zurückgeben.
- Seitengröße und Bildlauf helfen, wenn Sie mehr Auswahlmöglichkeiten haben, als auf eine Seite passen.
Indem Sie dem Beispiel von Tim Corey folgen - mit seinen tatsächlichen Listen von üblichen Namen und Familiennamen - können Sie schnell saubere, benutzerfreundliche Mehrfachauswahllisten in Ihren eigenen Spectre Console-Anwendungen implementieren.
