
在.NET生態系統中,控制臺程式的表現相對較差,通常來說,這種專案經常作為Demo演示使用,現在是時候讓控制臺應用程式得到其應有的尊重了,
終端技術的發展開啟了增強用戶體驗的復興, ITerm2, Hyper, Windows Terminal,所有這些工具都為單調的控制臺體驗增加了一些趣味, 雖然這些工具都允許用戶定制自己體驗,但是對于開發人員來說,他們還希望向控制臺應用程式中添加一些編程風格,
在本篇博文中,我們將一起看一下如何使用一些出色的開源專案為我們的控制臺程式增添趣味,這里說明的順序并不表明專案的優劣,他們都是改善我們控制臺程式體驗的優秀方案,
Colorful.Console
Colorful.Console是一個Nuget包,它可以增強我們對控制臺輸出文字樣式的控制,我們可以使用System.Drawing.Color中定義的顏色來定義控制臺程式的配色方案,
using System; using System.Drawing; using Console = Colorful.Console; ... ... Console.WriteLine("console in pink", Color.Pink); Console.WriteLine("console in default");

除此之外,Colorful.Console還允許我們使用FIGlet字體撰寫帶顏色的ASCII碼輸出
FIGLet: http://www.figlet.org/
FigletFont font = FigletFont.Load("chunky.flf"); Figlet figlet = new Figlet(font); Console.WriteLine(figlet.ToAscii("Belvedere"), ColorTranslator.FromHtml("#8AFFEF")); Console.WriteLine(figlet.ToAscii("ice"), ColorTranslator.FromHtml("#FAD6FF")); Console.WriteLine(figlet.ToAscii("cream."), ColorTranslator.FromHtml("#B8DBFF"));
這個輸出的結果完全就是黑客的夢想,

我建議你訪問一下colorful.console的官方站點,了解這個庫能實作的所有效果,以便更好的改善控制臺程式的體驗,
Colorful.Console: http://colorfulconsole.com/
ConsoleTables
ConsoleTables包是我(作者)自己撰寫的,這里有一點厚顏無恥., 使用這個庫,可以讓開發人員很輕松的將一組物件以表格的形式展示在控制臺中,
static void Main(String[] args) { var table = new ConsoleTable("one", "two", "three"); table.AddRow(1, 2, 3) .AddRow("this line should be longer", "yes it is", "oh"); table.Write(); Console.WriteLine(); var rows = Enumerable.Repeat(new Something(), 10); ConsoleTable .From<Something>(rows) .Configure(o => o.NumberAlignment = Alignment.Right) .Write(Format.Alternative); Console.ReadKey(); }
以前,誰不希望能在控制臺中輸出一個表格呢?
FORMAT: Default: -------------------------------------------------- | one | two | three | -------------------------------------------------- | 1 | 2 | 3 | -------------------------------------------------- | this line should be longer | yes it is | oh | -------------------------------------------------- Count: 2 FORMAT: Alternative: +----------------------------+-----------+-------+ | one | two | three | +----------------------------+-----------+-------+ | 1 | 2 | 3 | +----------------------------+-----------+-------+ | this line should be longer | yes it is | oh | +----------------------------+-----------+-------+
自從ConsoleTables發布以來,許多開發人員已經研發出自己的控制臺表格庫了,有一些甚至更好,你可以自行去查找一下,
ShellProgressBar
和需要其他應用程式一樣,控制臺程式也可以執行長時任務,ShellProgressBar是一個非常棒的庫,使用它,你可以在控制臺輸出一些非常驚艷的進度條,而且,ShellProgressBar是可以實作進度條的嵌套使用,例如,如下GIF影片中展示的效果,

ShellProgressBar使用起來相當的直接,
const int totalTicks = 10; var options = new ProgressBarOptions { ProgressCharacter = '─', ProgressBarOnBottom = true }; using (var pbar = new ProgressBar(totalTicks, "Initial message", options)) { pbar.Tick(); //will advance pbar to 1 out of 10. //we can also advance and update the progressbar text pbar.Tick("Step 2 of 10"); }
謝謝你, Martijin Larrman, 這真的是一個非常好用的庫,
GUI.CS
GUI.CS是一個非常棒的控制臺UI工具包,它提供了一個功能完善的工具箱,開發人員可以使用它構建早期控制臺常見的一種用戶界面,

這個UI工具箱提供了如下控制元件:
- Buttons
- Labels
- Text Entry
- Text View
- User Inputs
- Windows
- Menus
- ScrollBars
使用它,開發人員可以在控制臺應用中實作一些令人難以置信的效果,這個庫是由Miguel De Icaza撰寫的,是控制臺技術的巔峰之作,下面讓我們一起來看一個實體程式,
using Terminal.Gui; class Demo { static void Main () { Application.Init (); var top = Application.Top; // 創建頂級表單 var win = new Window ("MyApp") { X = 0, Y = 1, // 預留選單行 // 使用Dim.Fill(), 它可以自動調整表單大小,實作自適應,而無需手動敢于 Width = Dim.Fill (), Height = Dim.Fill () }; top.Add (win); // 創建一個選單 var menu = new MenuBar (new MenuBarItem [] { new MenuBarItem ("_File", new MenuItem [] { new MenuItem ("_New", "Creates new file", NewFile), new MenuItem ("_Close", "", () => Close ()), new MenuItem ("_Quit", "", () => { if (Quit ()) top.Running = false; }) }), new MenuBarItem ("_Edit", new MenuItem [] { new MenuItem ("_Copy", "", null), new MenuItem ("C_ut", "", null), new MenuItem ("_Paste", "", null) }) }); top.Add (menu); var login = new Label ("Login: ") { X = 3, Y = 2 }; var password = new Label ("Password: ") { X = Pos.Left (login), Y = Pos.Top (login) + 1 }; var loginText = new TextField ("") { X = Pos.Right (password), Y = Pos.Top (login), Width = 40 }; var passText = new TextField ("") { Secret = true, X = Pos.Left (loginText), Y = Pos.Top (password), Width = Dim.Width (loginText) }; // 添加一些其他控制元件 win.Add ( // 這是我最喜歡的布局 login, password, loginText, passText, // 這里使用了絕對定位 new CheckBox (3, 6, "Remember me"), new RadioGroup (3, 8, new [] { "_Personal", "_Company" }), new Button (3, 14, "Ok"), new Button (10, 14, "Cancel"), new Label (3, 18, "Press F9 or ESC plus 9 to activate the menubar")); Application.Run (); } }
總結
作為開發人員,我們可以沉迷于GUI, 這是理所當然的,它使我們更有生產力,但是控制臺應用程式同樣也很強大,下次當你撰寫控制臺程式的時候,你可以考慮使用以上介紹的某些庫,以便為你的控制臺應用增添色彩,
原文:Upgrade Your .NET Console App Experience
作者:Khalid Abuhakmeh
譯文:Lamond Lu
本文來自博客園,作者:古道輕風,轉載請注明原文鏈接:https://www.cnblogs.com/88223100/p/upgraded-dotnet-console-experience.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/404239.html
標籤:C#
