跳過到頁腳內容
Iron Academy Logo
C# 應用程式
C# 應用程式

其他分類

具有分組的多選列表 - Spectre Console系列

Tim Corey
6m 21s

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,因為使用者可能選擇零個、一個或多個項目 (0:53–1:01)。 然後,他將其指派給一個 AnsiConsole.Prompt 的結果,使用一個新的 MultiSelectionPrompt() (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 支援自訂強調顏色,因此您的指示可以顯示為綠色、藍色、黃色、灰色或紅色,強調關鍵部分。

重要的是要告訴使用者:按空格鍵切換項目,按回車鍵接受答案 (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)。 新的提示顯示了兩個有明確標籤的群組。 如果他將游標移動到"常用名稱"標籤並按下空格鍵,該群組中的所有項目會被一次性選中 (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)。 即使只有單個群組,您仍然可以一次性選擇整個群組。

他展示您可以將群組命名為類似"全選",以達到更通用的目的 (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的開發者創建內容?將您的專業知識轉化為額外收入!

鋼鐵支援團隊

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