Listy z wyborem wielokrotnym z grypowaniem - seria Spectre Console
Spectre Console to biblioteka .NET, która pozwala przekształcać proste aplikacje konsolowe C# w bogate wizualnie, interaktywne narzędzia. Zamiast statycznych czarno-białych ekranów, można wyświetlać użytkownikom kolory, układy i interaktywne opcje. W tym artykułe zagłębimy się w jedną z najpotężniejszych funkcji wprowadzania — zapytania o wielokrotne wybory — i szczególnie w to, jak używać grup wyborów.
Zrobimy to, śledząc krok po kroku wideo Tima Coreya "Multi-Select Lists with Groupings – Spectre Console Series". Tim wyjaśnia, pokazuje kod i go uruchamia, abyś mógł zobaczyć, jak wdrożyć to we własnym projekcie. Poniżej każda sekcja wskazuje przybliżony czas w wideo, kiedy pojawia się ten temat, aby można było bezpośrednio do niego przejść.
Wprowadzenie do zapytania o wielokrotne wybory
Na początku wideo, Tim Corey przypomina widzom, że Spectre Console pozwala "przekształcić aplikacje konsolowe C# w atrakcyjne wizualnie i informacyjne aplikacje" (0:02). Jego seria rozkłada bibliotekę na kawałki, omawiając ją w dziesięciominutowych segmentach. To konkretne wideo skupia się na prośbie, aby użytkownik wybrał jeden lub wiele wyborów z listy lub z kilku list, używając zapytania o wielokrotne wybory (0:18).
Ustawienie prostego zapytania o wielokrotne wybory
Tim zaczyna od pokazywania dwóch list, które już ma w swoim kodzie:
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.)
Tworzy List
Tim podkreśla, że każdy wybór będzie obiektem string, a zapytanie zwróci tablicę lub listę wybranych przez użytkownika wyborów (1:20–1:26).
Następnie dodaje niestandardowy tytuł, aby skierować użytkownika:
.Title("Which are your favorite placeholder names?")
.Title("Which are your favorite placeholder names?")
To ustawia wyraźny nagłówek na górze zapytania (1:31–1:50).
Dodawanie tekstu instrukcji dla użytkownika
Tim nie ogranicza się tylko do tytułu. Dodaje także tekst instrukcji, aby powiedzieć użytkownikowi, jak korzystać z zapytania (1:50).
Pisze coś takiego:
.InstructionsText("(Press <space> to toggle, <enter> to accept)")
.InstructionsText("(Press <space> to toggle, <enter> to accept)")
O godzinie 1:56 wyjaśnia, że możesz nawet sformatować go w kolorach lub innych stylach — Spectre Console obsługuje dostosowywanie koloru akcentu, dzięki czemu instrukcje mogą pojawiać się na zielono, niebiesko, żółto, szaro lub czerwono, aby podkreślić kluczowe części.
Ważną częścią jest powiedzenie użytkownikowi: naciśnij spację, aby przełączać elementy, naciśnij enter, aby zaakceptować odpowiedź (2:12). To sprawia, że skrypt jest łatwy dla użytkownika.
Dodawanie wyborów i wyświetlanie wyników
Następnie Tim dodaje rzeczywiste dane. Na początku trzyma się prostoty z jedną listą. Używa .AddChoices(usualNames) (2:24–2:34).
Następnie pisze prostą pętlę foreach, aby wypisać wybory użytkownika z powrotem na konsolę (2:38–2:52):
foreach (var name in favoriteNames)
{
Console.WriteLine(name);
}
foreach (var name in favoriteNames)
{
Console.WriteLine(name);
}
Nie martwi się o formatowanie — po prostu pokazuje, że zapytanie o wielokrotne wybory działa (2:53–3:00).
Tim uruchamia program w terminalu (3:00). Zapytanie wyświetla jego listę nazwisk. Używa spacji, aby wybrać kilka elementów — takich jak "Tim Corey" i "Sue Storm" — a następnie naciska Enter, a konsola wypisuje wybrane opcje (3:07–3:15). To demonstruje najprostszy działający wariant.

Przechodzenie do wielu list z grupami wyborów
Po działającym podstawowym ustawieniu, Tim sprawia, że rzeczy są "trochę bardziej interesujące" (3:22). Zamiast jednej listy, ma dwie listy: usualNames i familyNames.
Komentuje oryginalne wywołanie .AddChoices() i wprowadza .AddChoiceGroup() (3:32–3:38). To pozwala mu grupować powiązane elementy pod etykietą. Pisze:
.AddChoiceGroup("The usual names", usualNames)
.AddChoiceGroup("Family names", familyNames)
.AddChoiceGroup("The usual names", usualNames)
.AddChoiceGroup("Family names", familyNames)
Teraz każda grupa pojawi się osobno w zapytaniu. Ta struktura jest szczególnie pomocna, gdy prezentujesz dziesiątki opcji i chcesz zorganizować je na strony lub grupy. Chociaż transkrypt tego nie pokazuje, multi-wybór Spectre Console również ma właściwość PageSize, dzięki czemu możesz kontrolować, ile elementów jest wyświetlanych naraz, gdy jest więcej wyborów niż mieści się na jednym ekranie.
Jak działa wybór grupowy w czasie wykonywania
Tim zapisuje i ponownie uruchamia kod (4:11). Nowe zapytanie pokazuje obie grupy z wyraźnymi etykietami. Jeśli przesunie kursor na etykietę "The usual names" i naciśnie spację, wszystkie elementy w tej grupie zostaną wybrane jednocześnie (4:17–4:19).
Zwraca też uwagę, że Spectre Console automatycznie obsługuje przewijanie, jeśli lista jest dłuższa niż ekran — zobaczysz wiadomość "przesuń w górę i w dół, aby odsłonić więcej wyborów" w szarości (4:25–4:31). To domyślne zachowanie dla przewijalnych list.
Tim demonstruje przewijanie do nazwisk rodziny, wybierając je, a następnie wybierając także osobę jak Sue Storm (4:39–4:43). Gdy naciska Enter, konsola wypisuje wszystkie wybrane nazwy łącznie (4:45). To pokazuje, jak funkcja wyświetla więcej wyborów, pozwala je przełączać, a następnie zwraca jedną listę wybranych obiektów.

Rozumienie zapytania o wielokrotne wybory vs. zapytanie o wybór
O godz. 5:00 Tim podsumowuje to, co pokazał. Zapytanie o wielokrotne wybory działa jak zwykłe zapytanie o wybór, ale zwraca listę dowolnego typu, który podasz (5:03–5:08).
Możesz dodać tekst instrukcji, tak jak zrobił to Tim, i możesz używać grup wyborów do organizowania i opcjonalnego wyboru całych grup jednym naciśnięciem klawisza (5:14–5:18). To sprawia, że duże lub złożone menu są znacznie bardziej zarządzalne dla użytkownika.
To również sugeruje zdolność Spectre Console do pracy z złożonymi obiektami: twój obiekt wyboru może być czymś więcej niż stringiem. Możesz dostarczyć obiekt z właściwością ChoiceLabel, aby kontrolować, co jest wyświetlane, podczas gdy nadal otrzymujesz cały obiekt z powrotem, gdy użytkownik zaakceptuje swoją odpowiedź.
Elastyczne użycie grup wyborów i etykiet
Tim również wyjaśnia, że nie musisz mieć dwóch grup, aby używać .AddChoiceGroup() (5:20–5:24). Nawet z jedną grupą, nadal masz korzyść z możliwości wyboru całej grupy naraz.
Pokazuje, że można nazwać grupę jako "Wybierz wszystkie", aby było bardziej uniwersalne (5:34–5:42). Wybranie tej górnej pozycji kolejno przełączy wszystkie poniższe elementy (5:44–5:47). Możesz także użyć wyróżnienia koloru — na przykład, aby sprawić, że etykieta grupy będzie zielona lub niebieska, aby ją odróżnić — aby skierować użytkownika do domyślnej lub wymagańej grupy. To daje dużą elastyczność w sposobie strukturacji zapytań.
Podsumowanie
Tim kończy wideo podsumowując: tak robi się zapytania o wielokrotne wybory z Spectre Console, w tym dodawanie grup wyborów do grupowego wyboru (5:50–5:53). Jak zawsze, kod źródłowy jest w opisie (5:57).
Kluczowe wnioski z omówienia Tima Coreya
-
Wielokrotne wybory Spectre Console pozwalają użytkownikom wybrać zero, jeden lub wiele elementów z listy.
-
Dodaj tytuł i tekst instrukcji, aby skierować użytkowników; możesz użyć koloru akcentu, aby wyróżnić wymagańą informację.
-
Użyj .AddChoices() dla prostej listy; użyj .AddChoiceGroup() dla wielu lub zgrupowanych list.
-
Użytkownicy naciskają Spację, aby przełączać wybory, i Enter, aby zaakceptować.
-
Same etykiety grup mogą być przełączane, aby wybrać wszystkie elementy naraz.
-
Zapytanie może wyświetlać złożone obiekty z właściwością ChoiceLabel, jednocześnie zwracając podkładowy obiekt.
- Rozmiar strony i przewijanie pomagają, gdy masz więcej wyborów niż mieści się na jednej stronie.
Podążając za przykładem Tima Coreya — z jego rzeczywistymi listami zwykłych nazwisk i nazwisk rodziny — możesz szybko wdrożyć czyste, przyjazne użytkownikowi listy z wielokrotnymi wyborami we własnych aplikacjach Spectre Console.
