從列表中選擇項目 - Spectre Console系列
Spectre Console 是一個強大的 NuGet 套件,適用於 .NET,它讓開發者可以建立互動的主控台應用程式,而非單純的靜態文字程式。 其最有用的功能之一是 Spectre Console 選擇提示,允許您呈現一個選項清單,使用者可以用鍵盤直接滾動並選擇。 與讓人們手動輸入答案相比,這使得主控台輸入更可靠、使用者友善且視覺上更出色。
在他的視頻"從清單中選擇項目 - Spectre Console 系列"中,Tim Corey 具體展示了如何使用此功能。 在本文中,我們將逐步跟隨他的講解,指出時間標記,這樣您可以同步觀看並編寫程式碼。 這是一個學習如何在自己的 .NET 主控台應用程式中創建並自訂選擇提示的好方法。
課程介紹
在 0:00,Tim 解釋了 Spectre Console 允許開發者將 C# 主控台應用程式轉變為視覺上吸引人且資訊豐富的應用程式。 他的一系列視頻以每 10 分鐘為一個單位講解該程式庫,來源程式碼在描述中鏈接。
在這節課(0:18),Tim 著重講解如何要求使用者從清單中選擇一個選項,然後使用鍵盤導航該列表。這種"詢問和回答"模式是構建現代和互動主控台應用程式的基礎。他還提醒觀眾(0:27)訂閱他的頻道並訪問 iamtimcorey.com 以獲取更多訓練資源。
創建選擇提示
在 0:34,Tim 展示了他常用在應用程式中的佔位符名稱列表。 如果您想要一個"最喜歡的水果"例子,那可能會簡單地變成一個水果列表:蘋果、香蕉、橙子。 他設置了一個字串類型的變量來保存使用者的選擇答案:
string favoriteName;
string favoriteName;

然後在 0:57,Tim 從前一節課涵蓋的基本提示進一步到完整的 SelectionPrompt 函數:
favoriteName = AnsiConsole.Prompt(
new SelectionPrompt<string>()
.Title("Which is your favorite placeholder name")
.AddChoices(names)
);
favoriteName = AnsiConsole.Prompt(
new SelectionPrompt<string>()
.Title("Which is your favorite placeholder name")
.AddChoices(names)
);
他解釋(1:13)選擇提示需要一個標題,在他的例子中是"哪個是您最喜歡的佔位符名稱。"如果您是詢問最喜歡的水果,您可以將標題相應地更改為"哪個是您最喜歡的水果。"
雖然您可以使用 Spectre Console 的樣式裝飾文本(1:24)—使用藍色、綠色或灰色,例如—在這節課中,他專注於選擇提示本身。
在 1:39,Tim 透過調用 .AddChoices() 添加選擇—他的名稱列表。 這些選擇可以是任何東西:水果、數字、物件,甚至是一個"搜尋"功能的結果。
最後,在 1:55,Tim 使用 Spectre Console 的標記行來將選擇的項目顯示回給使用者:
AnsiConsole.MarkupLine($"Your favorite name is [red]{favoriteName}[/].");
AnsiConsole.MarkupLine($"Your favorite name is [red]{favoriteName}[/].");
這使用內嵌標記將所選答案的顏色設為紅色,但如果您的主控台主題需要,您可以同樣使用藍色或綠色。
運行選擇提示
在 2:34,Tim 儲存並運行程式碼。主控台顯示:
-
一個名字或水果的列表。
-
箭頭鍵允許您上下移動(2:41)。
- 按 Enter 鍵選擇項目。
Tim 演示選擇"Sue Storm"(2:50)。 一旦按下 Enter 鍵,列表消失,主控台輸出:
Your favorite name is Sue Storm.
Your favorite name is Sue Storm.
如果這是一個水果列表,您可能會看到:"您最喜歡的水果是香蕉"或"您最喜歡的水果是蘋果。"
處理長列表
Tim 接著解決了一個常見問題:長列表。 在 3:13,他介紹了 PageSize 屬性來限制可見的項目數:
.PageSize(4)
.PageSize(4)
他解釋(3:19)說 4 算故意小,以展示這個功能。 一次只能顯示這麼多項目。 如果您有一個大的水果清單 - 蘋果、香蕉、橙子、芒果、鳳梨 – PageSize 可以防止主控台無休止的滾動。
為了指導使用者,Tim 在 3:34 增加了一個用灰色顯示的 MoreChoicesText 信息:
.MoreChoicesText("[grey](Move down to reveal more choices)[/]")
.MoreChoicesText("[grey](Move down to reveal more choices)[/]")
此文本告訴使用者可以向下移動以揭示更多選擇。 如果您的列表很大且您希望提供一個清晰的提示而不是冒著錯誤或混淆的風險,這特別有用。
演示長列表行為
Tim 在 4:08 再次運行程式:
-
初始僅顯示四個選項。
-
灰色信息說"向下移動以揭示更多選擇"(4:13)。
-
向下滾動顯示更多項目。
- 向上滾動再次顯示第一批項目(4:20)。
Tim 提到(4:25)這對於大列表來說是理想的—沒有無休止的主控台滾動。 您可能一次顯示 10 或 15 項,然後允許使用者翻頁瀏覽剩下的。這能解決一次過多輸出而壓倒主控台的問題。
為什麼選擇提示比打字更好
在 4:38,Tim 強調選擇提示比打字更好:
-
一旦您做出選擇,清單就消失了(4:41)。
- 您立即看到您的選擇答案(4:45)。
他將其與老式提示相對比(5:05),當時使用者必須打字"是"或"否"。使用選擇提示,您可以直接提供這些選擇並讓使用者用箭頭鍵選擇,減少錯誤並使體驗更流暢。
Tim 表示(5:35)該提示是一個"非常酷的新增功能",因為它簡化了輸入,使主控台應用更具互動性,並為輸入問題提供了一個明確的解決方案。
其他用途和未來主題
Tim 提到(5:43)本課涵蓋了從清單中選擇一個項目。在未來的視頻中,他將展示多選提示(5:39),用戶可以開關多個項目,然後按 Enter 鍵確認。
他還指出(5:47)清單可以是任何物件類型 - 字串、整數、水果,甚至是函數返回的預設選項。 例如,您可以提示使用者選擇他們最喜歡的水果("蘋果"、"香蕉"、"橘子"),而不是名字(5:55)。
使用 Spectre Console 的選擇提示,您甚至可以設置預設值、處理必要的答案,並自訂選擇後的動作。
結論
Tim 在 6:01 結束他的視頻,重申這是如何在 Spectre Console 中實現項目選擇的 - 一種乾淨、使用者友好地處理主控台應用列表的方法。 無論您詢問的是最喜歡的水果、數字或物件,選擇提示都為您的應用提供了一個完善的體驗,不需要額外的打字或錯誤。
Tim Corey 視頻的關鍵要點
-
Spectre Console 的 SelectionPrompt 允許使用者使用箭頭鍵瀏覽列表,而不是手動輸入。
-
通過標題、選擇、顏色(藍色、綠色、灰色)、PageSize 和 MoreChoicesText 進行自訂,以幫助揭示更多選項。
-
一旦選擇了項目,列表就消失,所選答案顯示出來。
-
適用於短清單和長清單,防止主控台滾動問題。
-
適用於任何數據類型(字串、數字、水果如蘋果、香蕉、橙子或自定義物件)。
- Tim 將在未來的視頻中涵蓋多選提示,用戶可以開關多個選項,然後按 Enter 鍵確認。
