具有分組的多選列表 - Spectre Console系列
Spectre Console 是一個 .NET 程式庫,可讓您將簡單的 C# 主控台應用程式轉變為視覺豐富、互動性強的工具。 不用再面對單調的黑白畫面,您可以使用顏色、佈局和互動選擇來引導使用者。 在這篇文章中,我們將深入其最強大的輸入功能之一——多重選擇提示——特別說明如何使用選項群組。
我們將依循 Tim Corey 的教學影片"多重選擇列表與群組 – Spectre Console 系列"來進行。 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
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 支援自訂強調顏色,因此您的指示可以顯示為綠色、藍色、黃色、灰色或紅色,強調關鍵部分。
重要的是要告訴使用者:按空格鍵切換項目,按回車鍵接受答案 (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)。 這展示了最簡單的運作版本。

轉移到多個列表和選項群組
在基本設置運行後,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)。 新的提示顯示了兩個有明確標籤的群組。 如果他將游標移動到"常用名稱"標籤並按下空格鍵,該群組中的所有項目會被一次性選中 (4:17–4:19)。
他還指出如果列表比螢幕更長,Spectre Console 會自動處理滾動,您會看到"上移和下移以顯示更多選項"的灰色訊息 (4:25–4:31)。 這是可滾動列表的預設行為。
Tim 示範了滾動到家庭名字列表,選中它們,然後選擇一個像 Sue Storm 的個別名稱 (4:39–4:43)。 當他按下 Enter 時,主控台打印出所有選擇的名字組合(4:45)。 這顯示了功能如何展示更多選項,允許您切換它們,然後返回選擇物件的單一列表。

理解多重選擇提示與選擇提示之間的差異
在 5:00,Tim 總結了他所展示的內容。 多重選擇提示的運作類似於普通選擇提示,但會返回您傳入類型的列表 (5:03–5:08)。
您可以像他這樣添加說明文字,您還可以使用選項群組來組織,選擇整個群組只需按一次鍵 (5:14–5:18)。 這使得大型或複雜的菜單對使用者來說更易管理。
這也暗示了 Spectre Console 處理複雜物件的能力:您的選擇對象可以不止是一個字串。 您可以提供具有 ChoiceLabel 屬性的物件來控制顯示內容,並在使用者接受他們的答案時,仍然收到完整的物件。
選擇群組和標籤的靈活使用
Tim 也澄清使用 .AddChoiceGroup() 不一定要有兩個群組 (5:20–5:24)。 即使只有單個群組,您仍然可以一次性選擇整個群組。
他展示您可以將群組命名為類似"全選",以達到更通用的目的 (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 應用程式中快速實現簡潔、使用者友好的多重選擇列表。
