经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » ASP.net » 查看文章
使用Terminal.Gui构建功能强大的.NET控制台应用
来源:cnblogs  作者:追逐时光者  时间:2024/7/8 9:55:38  对本文有异议

前言

前段时间分享了一个库帮你轻松的创建漂亮的.NET控制台应用程序 - Spectre.Console的文章教程,然后就有小伙伴提问:.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运行、开发环境。

安装Terminal.Gui.Templates

  1. dotnet new install Terminal.Gui.templates

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

  1. dotnet new tui -TestTerminalGui

编译并运行项目

  1. cd TestTerminalGui
    dotnet run

创建TerminalGuiExercise控制台应用

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

安装Terminal.Gui包

消息框代码

  1.         static void Main(string[] args)
            {
                #region 消息框代码

                Application.Init();

                MessageBox.Query(100, 15,
                   "Question", "Do you like console apps?", "Yes", "No");

                Application.Shutdown();

                #endregion
            }

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

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

  1.         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
            }

用户登录示例代码

  1. 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支持??。

优秀项目和框架精选

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

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

DotNetGuide技术社区交流群

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
  • 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群??

原文链接:https://www.cnblogs.com/Can-daydayup/p/18282774

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号