Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
6m 21s
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ść.
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).
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"
};Dim usualNames As New List(Of String) From {
"Tim Corey",
"Sue Storm",
"Bilbo Baggins",
"John Doe",
"Princess Donut",
"Steve Rogers"
}
Dim familyNames As New List(Of String) From {
"Charity",
"Jon",
"Chris"
}(You can see these on screen at about 0:38.)
Tworzy List<string> o nazwie favoriteNames, ponieważ użytkownik może wybrać zero, jeden lub wiele elementów (0:53–1:01). Następnie przypisuje ją do wyniku AnsiConsole.Prompt z nowym MultiSelectionPrompt<string>() (1:05–1:16).
Tim podkreśla, że każdy wybór będzie obiektem łańcuchowym, a monit zwróci tablicę lub listę wybranych przez użytkownika opcji (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).
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.
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);
}For Each name In favoriteNames
Console.WriteLine(name)
NextNie 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.

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 przedstawiasz dziesiątki opcji i chcesz je zorganizować 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.
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 listy przewijanych.
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.

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, jak to zrobił, i możesz używać grup wyboru do organizowania i opcjonalnie wybierać całe grupy 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ź.
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 wymaganej grupy. To daje dużą elastyczność w sposobie strukturacji zapytań.
Tim kończy film podsumowując: oto jak wykonać monity multi-selekcji w Spectre Console, w tym dodawanie grup wyboru dla wyboru grupowego (5:50–5:53). Jak zawsze, kod źródłowy jest w opisie (5:57).
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ć wymaganą 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.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy