C# 使用 Terminal.Gui 套件建立具有圖形化介面的控制台應用程式

今天在逛 GitHub Trending 的時候看到了 gui-cs/Terminal.Gui 這個有趣的套件,可以很方便的建立具有圖形化介面的控制台應用程式:
Terminal.Gui 套件官方示範
嘗試了一下,這真的是超級對筆者的胃口!筆者以前在寫 WinForm 程式時從來不用拖拉,全部介面都是動態產生的,因為筆者會先繼承原始元件訂製自己的新元件,就可以很方便的調整各式尺寸、間距、文字大小和字體等,方便復用。

使用 Terminal.Gui 套件時沒有辦法使用拖拉,全部元素都要動態產生,但是卻可以很簡單的建立復古、歷久不衰的好用介面。

基礎應用程式

先安裝 Terminal.Gui 套件
	
dotnet add package Terminal.Gui
    

貼上以下程式碼:
    
using Terminal.Gui;


Application.Init();

try
{
    Application.Run(new HomePage());
}
finally
{
    Application.Shutdown();
}
    

    
using Terminal.Gui;


public class HomePage : Terminal.Gui.Window
{
    public HomePage()
    {
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        this.Title = "Ruyut App (按下 Ctrl+Q 退出本程式)";

        var button = new Terminal.Gui.Button();
        button.X = Pos.Center();
        button.Y = Pos.Center();
        button.Text = "這是按鈕";
        button.Clicked += () =>
        {
            MessageBox.Query("標題", "訊息", "確定");
        };
        this.Add(button);
    }
}
    

在專案目錄執行下列指令就可以看到剛剛寫的復古簡約風應用程式了:
    
dotnet run
    

常用程式碼示範

配色

覺得顏色不好看可以手動調整配色:
    
        this.ColorScheme = Colors.TopLevel; // 綠色+黑色 (邊界+底色)
        this.ColorScheme = Colors.Base; // 白色+藍色
        this.ColorScheme = Colors.Menu; // 白色+灰色
        this.ColorScheme = Colors.Dialog; // 黑色+灰白色
        this.ColorScheme = Colors.Error; // 紅色+灰白色
    

介面

上面我們的首頁是繼承 Terminal.Gui.Window ,會有外框,如果不想要可以使用 Terminal.Gui.Toplevel ,就會是完全空的畫面

上方選單列

    
var menuBar = new MenuBar(new MenuBarItem[]
{
    new MenuBarItem("_File", new MenuItem[]
    {
        new MenuItem("_Quit", "離開", () => Application.RequestStop())
    }),
    new MenuBarItem("_Edit", new MenuItem[]
    {
        new MenuItem("_Copy", "複製", () => { Console.WriteLine("Copy"); }),
        new MenuItem("_Paste", "貼上", () => { Console.WriteLine("Paste"); })
    })
});
this.Add(menuBar);
    

上面的英文前面有底線,例如 _File ,就是代表 F 是快捷鍵,可以使用 Alt + F 觸發

參考資料:
GitHub - gui-cs/Terminal.Gui
Terminal.Gui v1 - Cross Platform Terminal UI toolkit for .NET
使用 Terminal.Gui 的範例程式

留言