前段时间分享了一个库帮你轻松的创建漂亮的.NET控制台应用程序 - Spectre.Console的文章教程,然后就有小伙伴提问:.NET控制台应用需要应对强交互性的场景,有什么好的解决方案?
,今天大姚给大家分享一款适用于.NET的跨平台终端 UI 工具包,帮助大家快速构建功能强大的.NET控制台应用:Terminal.Gui。
Terminal.Gui是一个跨平台(Windows、Mac 和 Linux/Unix )、开源(遵循 MIT License)、免费的用于为.NET、.NET Core 和 Mono 构建丰富功能的控制台应用程序的工具包,并且该工具包适用于需要强交互性的场景。
上手体验之前,我们首先要安装好.NET运行、开发环境。
dotnet new install Terminal.Gui.templates
复制
dotnet new tui -n TestTerminalGui
复制
cd TestTerminalGuidotnet run
复制
首先我们创建名为:TerminalGuiExercise
的控制台应用。
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支持💖。
该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。
https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md