前段时间分享了一个库帮你轻松的创建漂亮的.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 TestTerminalGui
dotnet 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