1. 如何提升.NET 控制臺(tái)應(yīng)用體驗(yàn)?

        共 11490字,需瀏覽 23分鐘

         ·

        2024-05-25 23:12


        前言


        在.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è)庫(kù)能實(shí)現(xiàn)的所有效果,以便更好的改善控制臺(tái)程序的體驗(yàn)。

        Colorful.Console: http://colorfulconsole.com/

        ConsoleTables

        ConsoleTables包是我(作者)自己編寫的,這里有一點(diǎn)厚顏無恥.。使用這個(gè)庫(kù),可以讓開發(fā)人員很輕松的將一組對(duì)象以表格的形式展示在控制臺(tái)中。

        static void Main(String[] args)
        {
            var table = new ConsoleTable("one""two""three");
            table.AddRow(123)
                 .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();
        }

        以前,誰不希望能在控制臺(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)表格庫(kù)了。有一些甚至更好,你可以自行去查找一下。

        ShellProgressBar

        和需要其他應(yīng)用程序一樣,控制臺(tái)程序也可以執(zhí)行長(zhǎng)時(shí)任務(wù)。ShellProgressBar是一個(gè)非常棒的庫(kù),使用它,你可以在控制臺(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è)非常好用的庫(kù)。

        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è)庫(kù)是由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 (36"Remember me"),
                    new RadioGroup (38new [] { "_Personal""_Company" }),
                    new Button (314"Ok"),
                    new Button (1014"Cancel"),
                    new Label (318"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í)候,你可以考慮使用以上介紹的某些庫(kù),以便為你的控制臺(tái)應(yīng)用增添色彩。


        轉(zhuǎn)自:古道輕風(fēng)

        鏈接:cnblogs.com/88223100/p/upgraded-dotnet-console-experience.html


        回復(fù) 【關(guān)閉】學(xué)永久關(guān)閉App開屏廣告
        回復(fù) 【刪除】學(xué)自動(dòng)檢測(cè)那個(gè)微信好友刪除、拉黑
        回復(fù) 【手冊(cè)】獲取3萬字.NET、C#工程師面試手冊(cè)
        回復(fù) 【幫助】獲取100+個(gè)常用的C#幫助類庫(kù)
        回復(fù) 【加群】加入DotNet學(xué)習(xí)交流群

        瀏覽 71
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 精品午夜一区二区三区在 | 国产精品成人片一区在线观看 | 少妇的呻吟k8 | 国产精品久久久久77777按摩 | 草草影院1 |