跳至頁尾內容
Iron Academy Logo
C#應用程式
C#應用程式

其他類別

多選列表與分組 - Spectre Console 系列

[[academy-video-youtube({"vid": "VIUANifUTWI", "start_time": "0", "title": "Multi-Select Lists with Groupings - Spectre Console Series", "creator": "Tim Corey", "length": "6m 21s"})]]

Spectre Console 是一個 .NET 程式庫,讓您可以將普通的 C# 控制台應用程式轉變成視覺上豐富的互動工具。 取代靜態的黑白螢幕,您可以使用顏色、佈局和互動選項來提示使用者。 在本文中,我們將深入探討其最強大的輸入功能之一——多選提示,特別是如何使用選擇群組。

我們將按照 Tim Corey 在他的视频"Multi-Select Lists with Groupings – Spectre Console Series"中的步驟進行。 Tim 進行了解釋、展示程式碼並執行,這樣您便可以了解如何在自己的專案中實現這一功能。 以下,每個標題都註明了影片中該主題出現的近似時間,讓您可以直接跳轉。

多選提示的介紹

在影片開始時,Tim Corey 提醒觀眾,Spectre Console 允許您"將 C# 控制台應用程式轉變成視覺上迷人的資訊應用程式"(0:02)。 他在影片系列中以十分鐘為一段,逐步介紹程式庫。 這個特別的影片專注於使用多選提示,要求使用者從一個或多個列表中選擇一個或多個選項(0:18)。

設置簡單的多選提示

Tim 一開始展示了他的程式碼中已經存在的兩個列表:

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.)

他建立了一個名為 favoriteNames 的 List<string> ,因為使用者可能會選擇零、一個或多個項目(0:53–1:01)。 然後,他將其分配給 AnsiConsole.Prompt 與新的 MultiSelectionPrompt<string>() 的結果(1:05–1:16)。

Tim 強調,每個選項都將是一個字串物件,提示將返回一個或多個使用者選擇的選項的陣列或列表(1:20–1:26)。

接著,他新增了一個自訂標題以指導使用者:

.Title("Which are your favorite placeholder names?")
.Title("Which are your favorite placeholder names?")

這會在提示的頂部設置一個清晰的標題(1:31–1:50)。

新增指導使用者操作的說明文字

Tim 不僅僅新增了標題。 他還新增了說明文字,告訴使用者如何與提示互動(1:50)。

他寫了一些像這樣的東西:

.InstructionsText("(Press <space> to toggle, <enter> to accept)")
.InstructionsText("(Press <space> to toggle, <enter> to accept)")

在 1:56,他解釋了您甚至可以用顏色或其他樣式格式化它——Spectre Console 支援自訂強調色,這樣您的說明可以以綠色、藍色、黃色、灰色或紅色顯示,以突出關鍵部分。

重要的是告知使用者:按空格鍵切換項目,按 Enter 接受您的答案(2:12)。 這使得該腳本對使用者來說非常容易使用。

新增選擇項目並顯示結果

接下來,Tim 新增了實際資料。 起初他保持簡單,僅有一個列表。他使用 .AddChoices(usualNames)(2:24–2:34)。

然後他寫了一個簡單的 foreach 迴圈,將使用者的選擇列印回控制台(2:38–2:52):

foreach (var name in favoriteNames)
{
    Console.WriteLine(name);
}
foreach (var name in favoriteNames)
{
    Console.WriteLine(name);
}

他不關心格式化——只是顯示多選提示的工作原理(2:53–3:00)。

Tim 在終端中運行該程式(3:00)。 提示顯示了他的名字列表。 他使用空格鍵挑選一些項目——如"Tim Corey" 和 "Sue Storm"——然後按下 Enter,控制台列印出所選擇的選項(3:07–3:15)。 這顯示了最簡單的工作版本。

Spectre Console Multi Select Lists Groupings 1 related to 新增選擇項目並顯示結果

使用選擇群組移動到多個列表

基礎設置工作之後,Tim 讓事情變得"更加有趣"(3:22)。 他不只是一個列表,而是有兩個列表:usualNames 和 familyNames。

他註釋掉原始的 .AddChoices() 調用,並引入了 .AddChoiceGroup()(3:32–3:38)。 這允許他在標籤下分組相關項目。 他寫道:

.AddChoiceGroup("The usual names", usualNames)
.AddChoiceGroup("Family names", familyNames)
.AddChoiceGroup("The usual names", usualNames)
.AddChoiceGroup("Family names", familyNames)

現在,每個群組將分別出現在提示中。 這種結構特別有用,當您呈現數十個選項時,想要將它們組織成頁面或群組。 即使這是文字記錄所未顯示的,Spectre Console 的多選提示還有一個 PageSize 屬性,所以當有更多選擇時,您可以控制一次顯示多少項。

瞭解運行時的群組選擇運作原理

Tim 保存並再次運行程式碼(4:11)。 新的提示顯示了雙方群組以及明顯的標籤。 如果他將游標移動到"The usual names"標籤並按下空格鍵,那麼該群組中的所有項將一次被選中(4:17–4:19)。

他還指出,如果列表長於螢幕,Spectre Console 會自動處理滾動——您會看到灰色的"上下移動以顯示更多選項"消息(4:25–4:31)。 這是可滾動列表的預設行為。

Tim 演示了滾動到家庭名稱,選擇它們,然後再選擇像 Sue Storm 這樣的個人(4:39–4:43)。 當他按下 Enter 時,控制台列印出所有選擇的組合名稱(4:45)。 這顯示了該功能如何顯示更多選項,讓您切換它們,然後返回一個所選物件的列表。

Spectre Console Multi Select Lists Groupings 2 related to 瞭解運行時的群組選擇運作原理

理解多選提示與選擇提示的區別

在 5:00 Tim 進行了一個總結說明。 多選提示的運作方式類似於普通的選擇提示,但返回的是您傳入的型別列表(5:03–5:08)。

您可以像他一樣新增說明文字,同時可以使用選擇群組進行組織,並選擇性地用一個鍵選擇整個群組(5:14–5:18)。 這使得大型或複雜選單更容易讓使用者管理。

這也暗示了 Spectre Console 能夠處理複雜物件:您的選擇物件可以不僅僅是字串。 您可以提供帶有 ChoiceLabel 屬性的物件,以控制顯示內容,而當使用者接受其答案時仍返回完整物件。

靈活使用選擇群組和標籤

Tim 還澄清,您不必有兩個群組來使用 .AddChoiceGroup()(5:20–5:24)。 即使只有一個群組,您仍然可以選擇整個群組。

他展示您可以將群組命名為類似於"Select All"以更具泛用性(5:34–5:42)。 然後選擇頂部條目會切換所有以下項目(5:44–5:47)。 您還可以使用顏色高亮,例如將群組標籤設置為綠色或藍色以區分它—引導使用者尋找預設或必須的群組。這讓您在設計提示時有很多靈活性。

總結

Tim 以總結結束影片:這就是如何使用 Spectre Console 進行多選提示,包括為群組選擇新增選擇群組(5:50–5:53)。 一如既往,源程式碼位於說明中(5:57)。

Tim Corey 示範的要點

  • Spectre Console 多選讓使用者可以從列表中選擇零、一個或多個項目。

  • 新增標題和說明文字以指導使用者; 您可以使用強調色來突出需要的資訊。

  • 使用 .AddChoices() 來簡單列表;使用 .AddChoiceGroup() 來多個或分組列表。

  • 使用者按空格鍵切換選擇,按 Enter 接受。

  • 群組標籤本身可以切換以一次選擇所有項目。

  • 提示可以顯示帶有 ChoiceLabel 屬性的複雜物件,同時返回基礎物件。

  • 當您有多於一頁的選項時,頁面大小和滾動功能有助於顯示。

通過遵循 Tim Corey 的範例——使用他實際的通常名稱和家庭名稱列表——您可以快速在自己的 Spectre Console 應用中實現乾淨、使用者友好的多選列表。

Hero Worlddot related to 多選列表與分組 - Spectre Console 系列
Hero Affiliate related to 多選列表與分組 - Spectre Console 系列

分享您所愛以賺取更多報酬

您是否為使用 .NET、C#、Java、Python 或 Node.js 的開發者建立內容?將您的專業知識轉化為額外收入!

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話