当前位置: 欣欣网 > 码农

使用Terminal.Gui构建功能强大的.NET控制台应用

2024-07-04码农

前言

前段时间分享了 的文章教程,然后就有小伙伴提问: .NET控制台应用需要应对强交互性的场景,有什么好的解决方案? ,今天大姚给大家分享一款适用于.NET的跨平台终端 UI 工具包,帮助大家快速构建功能强大的.NET控制台应用:Terminal.Gui。

项目介绍

Terminal.Gui是一个跨平台(Windows、Mac 和 Linux/Unix )、开源(遵循 MIT License)、免费的用于为.NET、.NET Core 和 Mono 构建丰富功能的控制台应用程序的工具包,并且该工具包适用于需要强交互性的场景。

项目特点

  • 跨平台支持:可在Windows、Mac和Linux/Unix上运行。

  • 键盘和鼠标输入:支持键盘和鼠标输入,包括拖放支持。

  • 灵活布局:同时支持绝对布局和创新的计算布局系统 (Computed Layout)。Computed Layout 使控件之间的相对布局变得容易,并支持动态终端 UI。

  • 剪贴板支持:通过 Clipboard 类提供文本的剪切、复制和粘贴功能。

  • 任意视图:所有可见的 UI 元素都是 View 类的子类,这些子类可以包含任意数量的子视图。

  • 高级应用特性:主循环支持处理事件、空闲处理程序、计时器和监控文件描述符。大多数类对于线程来说都是安全的。

  • 响应式扩展 (Reactive Extensions):使用响应式扩展并受益于提高的代码可读性,以及应用 MVVM 模式和 ReactiveUI 数据绑定的能力。

  • 快速上手

    安装.NET Core SDK

    上手体验之前,我们首先要安装好.NET运行、开发环境。

  • 下载地址:https://dotnet.microsoft.com/zh-cn/download

  • 安装Terminal.Gui.Templates

    dotnet new install Terminal.Gui.templates

    创建一个新的Terminal.Gui 模板项目

    dotnet new tui -n TestTerminalGui

    编译并运行项目

    cd TestTerminalGui
    dotnet run

    创建TerminalGuiExercise控制台应用

    首先我们创建名为: TerminalGuiExercise 的控制台应用。

    安装Terminal.Gui包

    消息框代码

    static void Main(string[] args)
    {
    #region 消息框代码
    Application.Init();
    MessageBox.Query(100, 15,
    "Question""Do you like console apps?""Yes""No");
    Application.Shutdown();
    #endregion
    }


    简单的文本用户界面示例代码

    创建一个简单的带菜单栏的文本用户界面示例代码:

    static void Main(string[] args)
    {
    #region 创建一个简单的带菜单栏的文本用户界面示例代码
    Application.Init();
    var menu = new MenuBar(new MenuBarItem[] {
    new MenuBarItem ("_File", new MenuItem [] {
    new MenuItem ("_Quit""", () => {
    Application.RequestStop ();
    })
    }),});
    var win = new Window("追逐时光者,你好!!!")
    {
    X = 0,
    Y = 1,
    Width = Dim.Fill(),
    Height = Dim.Fill() - 1
    };
    Application.Top.Add(menu, win);
    Application.Run();
    Application.Shutdown();
    #endregion
    }


    用户登录示例代码

    using Terminal.Gui;
    namespace TerminalGuiExercise
    {
    internal class Program
    {
    static void Main(string[] args)
    {
    //用户登录示例
    Application.Run<UserLoginExampleWindow>();
    }
    }
    public class UserLoginExampleWindow : Window
    {
    public TextField usernameText;
    public UserLoginExampleWindow()
    {
    Title = "用户登录示例应用程序(Ctrl+Q退出)";
    //创建输入组件和标签
    var usernameLabel = new Label()
    {
    Text = "用户名:",
    Y = 5
    };
    usernameText = new TextField("")
    {
    X = Pos.Right(usernameLabel),
    Y = Pos.Bottom(usernameLabel) - 1,
    Width = Dim.Fill(),
    };
    var passwordLabel = new Label()
    {
    Text = "密码:",
    X = Pos.Left(usernameLabel),
    Y = Pos.Bottom(usernameLabel) + 5
    };
    var passwordText = new TextField("")
    {
    Secret = true,
    X = Pos.Left(usernameText),
    Y = Pos.Top(passwordLabel),
    Width = Dim.Fill(),
    };
    //创建登录按钮
    var btnLogin = new Button()
    {
    Text = "登录",
    Y = Pos.Bottom(passwordLabel) + 1,
    X = Pos.Center(),
    IsDefault = true,
    };
    //单击登录按钮时显示消息弹出
    btnLogin.Clicked += () =>
    {
    if (usernameText.Text == "admin" && passwordText.Text == "123456")
    {
    MessageBox.Query("登录结果""登录成功""Ok");
    Application.RequestStop();
    }
    else
    {
    MessageBox.ErrorQuery("登录结果""用户名或密码不正确""Ok");
    }
    };
    //将视图添加到窗口
    Add(usernameLabel, usernameText, passwordLabel, passwordText, btnLogin);
    }
    }
    }








    项目源码地址

    更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个Star支持💖。

  • GitHub开源地址:https://github.com/gui-cs/Terminal.Gui

  • API Documentation:https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui

  • 本文示例源码:https://github.com/YSGStudyHards/DotNetExercises/tree/master/TerminalGuiExercise

  • 优秀项目和框架精选

    该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。

    https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md


  • 学习是一个永无止境的过程,你知道的越多,你不知道的也会越多,在有限的时间内坚持每天多学一点,你一定能成为你想要成为的那个人。不积跬步无以至千里,不积小流无以成江河!!!

    See you next good day