在.NET生態(tài)系統(tǒng)中,控制臺(tái)程序的表現(xiàn)相對(duì)較差。通常來說,這種項(xiàng)目經(jīng)常作為Demo演示使用?,F(xiàn)在是時(shí)候讓控制臺(tái)應(yīng)用程序得到其應(yīng)有的尊重了。
終端技術(shù)的發(fā)展開啟了增強(qiáng)用戶體驗(yàn)的復(fù)興。ITerm2,Hyper,Windows Terminal,所有這些工具都為單調(diào)的控制臺(tái)體驗(yàn)增加了一些趣味。 雖然這些工具都允許用戶定制自己體驗(yàn),但是對(duì)于開發(fā)人員來說,他們還希望向控制臺(tái)應(yīng)用程序中添加一些編程風(fēng)格。
在本篇博文中,我們將一起看一下如何使用一些出色的開源項(xiàng)目為我們的控制臺(tái)程序增添趣味。這里說明的順序并不表明項(xiàng)目的優(yōu)劣,他們都是改善我們控制臺(tái)程序體驗(yàn)的優(yōu)秀方案。
Colorful.Console#
Colorful.Console是一個(gè)Nuget包,它可以增強(qiáng)我們對(duì)控制臺(tái)輸出文字樣式的控制。我們可以使用System.Drawing.Color中定義的顏色來定義控制臺(tái)程序的配色方案。
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"));
這個(gè)輸出的結(jié)果完全就是黑客的夢(mèng)想。
我建議你訪問一下colorful.console的官方站點(diǎn),了解這個(gè)庫能實(shí)現(xiàn)的所有效果,以便更好的改善控制臺(tái)程序的體驗(yàn)。
Colorful.Console:http://colorfulconsole.com/
ConsoleTables#
ConsoleTables包是我(作者)自己編寫的,這里有一點(diǎn)厚顏無恥.。 使用這個(gè)庫,可以讓開發(fā)人員很輕松的將一組對(duì)象以表格的形式展示在控制臺(tái)中。
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(rows) .Configure(o => o.NumberAlignment = Alignment.Right) .Write(Format.Alternative); Console.ReadKey(); }
以前,誰不希望能在控制臺(tái)中輸出一個(gè)表格呢?
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發(fā)布以來,許多開發(fā)人員已經(jīng)研發(fā)出自己的控制臺(tái)表格庫了。有一些甚至更好,你可以自行去查找一下。
ShellProgressBar#
和需要其他應(yīng)用程序一樣,控制臺(tái)程序也可以執(zhí)行長(zhǎng)時(shí)任務(wù)。ShellProgressBar是一個(gè)非常棒的庫,使用它,你可以在控制臺(tái)輸出一些非常驚艷的進(jìn)度條。而且,ShellProgressBar是可以實(shí)現(xiàn)進(jìn)度條的嵌套使用。例如,如下GIF動(dòng)畫中展示的效果。
ShellProgressBar使用起來相當(dāng)?shù)闹苯印?/p>
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, 這真的是一個(gè)非常好用的庫。
GUI.CS#
GUI.CS是一個(gè)非常棒的控制臺(tái)UI工具包。它提供了一個(gè)功能完善的工具箱,開發(fā)人員可以使用它構(gòu)建早期控制臺(tái)常見的一種用戶界面。
這個(gè)UI工具箱提供了如下控件:
- Buttons
- Labels
- Text Entry
- Text View
- User Inputs
- Windows
- Menus
- ScrollBars
使用它,開發(fā)人員可以在控制臺(tái)應(yīng)用中實(shí)現(xiàn)一些令人難以置信的效果。這個(gè)庫是由Miguel De Icaza編寫的,是控制臺(tái)技術(shù)的巔峰之作,下面讓我們一起來看一個(gè)實(shí)例程序。
using Terminal.Gui; class Demo { static void Main () { Application.Init (); var top = Application.Top; // 創(chuàng)建頂級(jí)窗體 var win = new Window ("MyApp") { X = 0, Y = 1, // 預(yù)留菜單行 // 使用Dim.Fill(), 它可以自動(dòng)調(diào)整窗體大小,實(shí)現(xiàn)自適應(yīng),而無需手動(dòng)敢于 Width = Dim.Fill (), Height = Dim.Fill () }; top.Add (win); // 創(chuàng)建一個(gè)菜單 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, // 這里使用了絕對(duì)定位 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 (); } }
總結(jié)#
作為開發(fā)人員,我們可以沉迷于GUI, 這是理所當(dāng)然的,它使我們更有生產(chǎn)力。但是控制臺(tái)應(yīng)用程序同樣也很強(qiáng)大。下次當(dāng)你編寫控制臺(tái)程序的時(shí)候,你可以考慮使用以上介紹的某些庫,以便為你的控制臺(tái)應(yīng)用增添色彩。
編輯:hfy
-
控制臺(tái)
+關(guān)注
關(guān)注
0文章
85瀏覽量
10328 -
應(yīng)用程序
+關(guān)注
關(guān)注
37文章
3237瀏覽量
57547 -
.NET
+關(guān)注
關(guān)注
0文章
47瀏覽量
24282 -
GUI
+關(guān)注
關(guān)注
3文章
638瀏覽量
39482
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論