如何提升.NET控制台应用体验?

在.net生态系统中,控制台程序的表现通常不如gui应用那么引人注目,它们经常被用作演示程序。然而,现在是时候给予控制台应用程序应有的重视了。

随着终端技术的发展,增强用户体验的机会也随之增加。ITerm2HyperWindows Terminal工具已经为单调的控制台体验增添了趣味。虽然这些工具允许用户定制体验,但开发人员仍希望在控制台应用程序中加入更多编程风格。

在本文中,我们将探讨如何通过一些优秀的开源项目来增强我们的控制台程序的趣味性。以下介绍的项目顺序并不代表其优劣,它们都是改善控制台程序体验的优秀选择。

Colorful.Console是一个NuGet包,它可以增强我们对控制台输出文字样式的控制。我们可以使用System.Drawing.Color中定义的颜色来定义控制台程序的配色方案。

using System;using System.Drawing;using Console = Colorful.Console;...Console.WriteLine("console in pink", Color.Pink);Console.WriteLine("console in default");

如何提升.NET控制台应用体验?

此外,Colorful.Console还允许我们使用FIGlet字体编写带颜色的ASCII码输出。

FigletFont font = FigletFont.Load("chunky.flf");Figlet figlet = new Figlet(font);Console.WriteLine(figlet.ToAscii("Belvedere"), ColorTranslator.FromHtml("#8AFFEF"));Console.WriteLine(figlet.ToAscii("ice"), ColorTranslator.FromHtml("#FAD6FF"));Console.WriteLine(figlet.ToAscii("cream."), ColorTranslator.FromHtml("#B8DBFF"));

如何提升.NET控制台应用体验?

这个输出结果完全就是黑客的梦想。我建议你访问colorful.console的官方网站,了解这个库能实现的所有效果,以更好地改善控制台程序的体验。

ConsoleTables是我(作者)自己编写的包,这里有点自卖自夸^.^。使用这个库,开发人员可以轻松地将一组对象以表格形式展示在控制台中。

static void Main(String[] args){    var table = new ConsoleTable("one", "two", "three");    table.AddRow(1, 2, 3)         .AddRow("this line should be longer", "yes it is", "oh");    table.Write();    Console.WriteLine();    var rows = Enumerable.Repeat(new Something(), 10);    ConsoleTable        .From(rows)        .Configure(o => o.NumberAlignment = Alignment.Right)        .Write(Format.Alternative);    Console.ReadKey();}

以前,谁不希望能在控制台中输出一个表格呢?

FORMAT: Default:--------------------------------------------------| one                        | two       | three |--------------------------------------------------| 1                          | 2         | 3     |--------------------------------------------------| this line should be longer | yes it is | oh    |--------------------------------------------------Count: 2FORMAT: Alternative:+----------------------------+-----------+-------+| one                        | two       | three |+----------------------------+-----------+-------+| 1                          | 2         | 3     |+----------------------------+-----------+-------+| this line should be longer | yes it is | oh    |+----------------------------+-----------+-------+

自从ConsoleTables发布以来,许多开发人员已经开发出自己的控制台表格库。有些甚至更好,你可以自行查找。

AppMall应用商店 AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

AppMall应用商店 56 查看详情 AppMall应用商店

ShellProgressBar和需要其他应用程序一样,控制台程序也可以执行长时间任务。ShellProgressBar是一个非常棒的库,使用它,你可以在控制台输出一些非常惊艳的进度条。而且,ShellProgressBar支持进度条的嵌套使用。例如,如下GIF动画中展示的效果。

如何提升.NET控制台应用体验?

ShellProgressBar使用起来非常直接。

const int totalTicks = 10;var options = new ProgressBarOptions{    ProgressCharacter = '─',    ProgressBarOnBottom = true};using (var pbar = new ProgressBar(totalTicks, "Initial message", options)){    pbar.Tick(); //will advance pbar to 1 out of 10.    //we can also advance and update the progressbar text    pbar.Tick("Step 2 of 10");}

谢谢你,Martijin Larrman,这真的是一个非常好用的库。

GUI.CS是一个非常棒的控制台UI工具包。它提供了一个功能完善的工具箱,开发人员可以使用它构建早期控制台常见的一种用户界面。

如何提升.NET控制台应用体验?

这个UI工具箱提供了如下控件:

ButtonsLabelsText EntryText ViewUser InputsWindowsMenusScrollBars

使用它,开发人员可以在控制台应用中实现一些令人难以置信的效果。这个库是由Miguel De Icaza编写的,是控制台技术的巅峰之作,下面让我们一起来看一个实例程序。

using Terminal.Gui;class Demo {    static void Main ()    {        Application.Init ();        var top = Application.Top;        // 创建顶级窗体        var win = new Window ("MyApp") {            X = 0,            Y = 1, // 预留菜单行            // 使用Dim.Fill(), 它可以自动调整窗体大小,实现自适应,而无需手动调整            Width = Dim.Fill (),            Height = Dim.Fill ()        };        top.Add (win);        // 创建一个菜单        var menu = new MenuBar (new MenuBarItem [] {            new MenuBarItem ("_File", new MenuItem [] {                new MenuItem ("_New", "Creates new file", NewFile),                new MenuItem ("_Close", "", () => Close ()),                new MenuItem ("_Quit", "", () => { if (Quit ()) top.Running = false; })            }),            new MenuBarItem ("_Edit", new MenuItem [] {                new MenuItem ("_Copy", "", null),                new MenuItem ("C_ut", "", null),                new MenuItem ("_Paste", "", null)            })        });        top.Add (menu);        var login = new Label ("Login: ") { X = 3, Y = 2 };        var password = new Label ("Password: ") {            X = Pos.Left (login),            Y = Pos.Top (login) + 1        };        var loginText = new TextField ("") {            X = Pos.Right (password),            Y = Pos.Top (login),            Width = 40        };        var passText = new TextField ("") {            Secret = true,            X = Pos.Left (loginText),            Y = Pos.Top (password),            Width = Dim.Width (loginText)        };        // 添加一些其他控件        win.Add (            // 这是我最喜欢的布局            login, password, loginText, passText,            // 这里使用了绝对定位            new CheckBox (3, 6, "Remember me"),            new RadioGroup (3, 8, new [] { "_Personal", "_Company" }),            new Button (3, 14, "Ok"),            new Button (10, 14, "Cancel"),            new Label (3, 18, "Press F9 or ESC plus 9 to activate the menubar")        );        Application.Run ();    }}

总结:作为开发人员,我们可以沉迷于GUI,这是理所当然的,它使我们更有生产力。但是控制台应用程序同样也很强大。下次当你编写控制台程序的时候,你可以考虑使用以上介绍的某些库,以便为你的控制台应用增添色彩。

以上就是如何提升.NET控制台应用体验?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/606189.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月10日 22:44:49
下一篇 2025年11月10日 22:50:01

相关推荐

  • Uniapp 中如何不拉伸不裁剪地展示图片?

    灵活展示图片:如何不拉伸不裁剪 在界面设计中,常常需要以原尺寸展示用户上传的图片。本文将介绍一种在 uniapp 框架中实现该功能的简单方法。 对于不同尺寸的图片,可以采用以下处理方式: 极端宽高比:撑满屏幕宽度或高度,再等比缩放居中。非极端宽高比:居中显示,若能撑满则撑满。 然而,如果需要不拉伸不…

    2025年12月24日
    400
  • 如何让小说网站控制台显示乱码,同时网页内容正常显示?

    如何在不影响用户界面的情况下实现控制台乱码? 当在小说网站上下载小说时,大家可能会遇到一个问题:网站上的文本在网页内正常显示,但是在控制台中却是乱码。如何实现此类操作,从而在不影响用户界面(UI)的情况下保持控制台乱码呢? 答案在于使用自定义字体。网站可以通过在服务器端配置自定义字体,并通过在客户端…

    2025年12月24日
    800
  • 绝对定位元素在不同分辨率下偏移,如何解决?

    盒子里的绝对定位元素偏移问题及解决方法 在自定义的输入框checkbox中,对于不同的分辨率设置的居中样式会发生意外的像素偏移,影响选中状态下小红点的居中效果。 偏移的原因在于使用像素单位px。不同分辨率下,像素点的显示方式不同,导致视觉上的错位。 解决方法是将像素单位替换为相对单位,如rem或em…

    2025年12月24日
    400
  • 如何在地图上轻松创建气泡信息框?

    地图上气泡信息框的巧妙生成 地图上气泡信息框是一种常用的交互功能,它简便易用,能够为用户提供额外信息。本文将探讨如何借助地图库的功能轻松创建这一功能。 利用地图库的原生功能 大多数地图库,如高德地图,都提供了现成的信息窗体和右键菜单功能。这些功能可以通过以下途径实现: 高德地图 JS API 参考文…

    2025年12月24日
    400
  • 如何使用 scroll-behavior 属性实现元素scrollLeft变化时的平滑动画?

    如何实现元素scrollleft变化时的平滑动画效果? 在许多网页应用中,滚动容器的水平滚动条(scrollleft)需要频繁使用。为了让滚动动作更加自然,你希望给scrollleft的变化添加动画效果。 解决方案:scroll-behavior 属性 要实现scrollleft变化时的平滑动画效果…

    2025年12月24日
    000
  • 如何为滚动元素添加平滑过渡,使滚动条滑动时更自然流畅?

    给滚动元素平滑过渡 如何在滚动条属性(scrollleft)发生改变时为元素添加平滑的过渡效果? 解决方案:scroll-behavior 属性 为滚动容器设置 scroll-behavior 属性可以实现平滑滚动。 html 代码: click the button to slide right!…

    2025年12月24日
    500
  • 如何选择元素个数不固定的指定类名子元素?

    灵活选择元素个数不固定的指定类名子元素 在网页布局中,有时需要选择特定类名的子元素,但这些元素的数量并不固定。例如,下面这段 html 代码中,activebar 和 item 元素的数量均不固定: *n *n 如果需要选择第一个 item元素,可以使用 css 选择器 :nth-child()。该…

    2025年12月24日
    200
  • 使用 SVG 如何实现自定义宽度、间距和半径的虚线边框?

    使用 svg 实现自定义虚线边框 如何实现一个具有自定义宽度、间距和半径的虚线边框是一个常见的前端开发问题。传统的解决方案通常涉及使用 border-image 引入切片图片,但是这种方法存在引入外部资源、性能低下的缺点。 为了避免上述问题,可以使用 svg(可缩放矢量图形)来创建纯代码实现。一种方…

    2025年12月24日
    100
  • 自定义 input checkbox 样式在不同分辨率下居中效果不佳怎么办?

    盒子内的绝对定位元素因分辨率不同而发生偏差问题的解决 针对自定义 input checkbox 样式在不同分辨率下居中效果不佳的问题,以下是解决方法: 在 css 代码中,像素单位会导致不同分辨率下像素点移位。因此,将 px 单位替换为相对单位即可解决此问题。 修改后的 css 代码如下: .cla…

    2025年12月24日
    000
  • 如何让“元素跟随文本高度,而不是撑高父容器?

    如何让 元素跟随文本高度,而不是撑高父容器 在页面布局中,经常遇到父容器高度被子元素撑开的问题。在图例所示的案例中,父容器被较高的图片撑开,而文本的高度没有被考虑。本问答将提供纯css解决方案,让图片跟随文本高度,确保父容器的高度不会被图片影响。 解决方法 为了解决这个问题,需要将图片从文档流中脱离…

    2025年12月24日
    000
  • 如何用 CSS 设置背景图片透明度?

    css 背景图片透明度设置困境 如何在 css 中有效调整背景图片的透明度,困扰了众多开发者。 无效的 rgba() 方法 许多开发者尝试使用 background-color: rgba() 方法,但发现无法生效。这是因为该方法适用于背景颜色,而背景图片则需要使用不同的方法。 立即学习“前端免费学…

    2025年12月24日
    000
  • CSS元素设置em和transition后,为何载入页面无放大效果?

    css元素设置em和transition后,为何载入无放大效果 很多开发者在设置了em和transition后,却发现元素载入页面时无放大效果。本文将解答这一问题。 原问题:在视频演示中,将元素设置如下,载入页面会有放大效果。然而,在个人尝试中,并未出现该效果。这是由于macos和windows系统…

    2025年12月24日
    200
  • JavaScript 修改 div id 属性时样式不生效的原因是什么,如何解决?

    javascript 修改 div id 属性时样式不生效的问题 在使用 javascript 修改 div 的 id 属性时,虽然 id 确实被改变了,但样式却可能没有相应改变。造成这种情况的原因是,绝对定位的元素在 id 改变后,其位置也会发生变化。 解决方法: 由于 id 改变会影响元素的位置…

    2025年12月24日
    000
  • 为什么 CSS mask 属性未请求指定图片?

    解决 css mask 属性未请求图片的问题 在使用 css mask 属性时,指定了图片地址,但网络面板显示未请求获取该图片,这可能是由于浏览器兼容性问题造成的。 问题 如下代码所示: 立即学习“前端免费学习笔记(深入)”; icon [data-icon=”cloud”] { –icon-cl…

    2025年12月24日
    200
  • 如何利用 CSS 选中激活标签并影响相邻元素的样式?

    如何利用 css 选中激活标签并影响相邻元素? 为了实现激活标签影响相邻元素的样式需求,可以通过 :has 选择器来实现。以下是如何具体操作: 对于激活标签相邻后的元素,可以在 css 中使用以下代码进行设置: li:has(+li.active) { border-radius: 0 0 10px…

    2025年12月24日
    100
  • 如何模拟Windows 10 设置界面中的鼠标悬浮放大效果?

    win10设置界面的鼠标移动显示周边的样式(探照灯效果)的实现方式 在windows设置界面的鼠标悬浮效果中,光标周围会显示一个放大区域。在前端开发中,可以通过多种方式实现类似的效果。 使用css 使用css的transform和box-shadow属性。通过将transform: scale(1.…

    2025年12月24日
    200
  • 前端进度条如何实现圆环效果和鼠标悬停提示?

    如何实现前端进度条 对于如何实现前端进度条,设计稿明确要求包含中间的圆环效果和鼠标悬停提示信息。针对这一需求,开发者提出了多种思路: 思路 1:修改 Element-UI Progress 这种方法虽然可行,但存在自定义样式困难的问题,难以满足需要在进度条中间添加圆环的需求。 立即学习“前端免费学习…

    2025年12月24日
    000
  • 如何用HTML/JS实现Windows 10设置界面鼠标移动探照灯效果?

    Win10设置界面中的鼠标移动探照灯效果实现指南 想要在前端开发中实现类似于Windows 10设置界面的鼠标移动探照灯效果,有两种解决方案:CSS 和 HTML/JS 组合。 CSS 实现 不幸的是,仅使用CSS无法完全实现该效果。 立即学习“前端免费学习笔记(深入)”; HTML/JS 实现 要…

    2025年12月24日
    000
  • 为什么我的 Safari 自定义样式表在百度页面上失效了?

    为什么在 Safari 中自定义样式表未能正常工作? 在 Safari 的偏好设置中设置自定义样式表后,您对其进行测试却发现效果不同。在您自己的网页中,样式有效,而在百度页面中却失效。 造成这种情况的原因是,第一个访问的项目使用了文件协议,可以访问本地目录中的图片文件。而第二个访问的百度使用了 ht…

    2025年12月24日
    000
  • 如何用前端实现 Windows 10 设置界面的鼠标移动探照灯效果?

    如何在前端实现 Windows 10 设置界面中的鼠标移动探照灯效果 想要在前端开发中实现 Windows 10 设置界面中类似的鼠标移动探照灯效果,可以通过以下途径: CSS 解决方案 DEMO 1: Windows 10 网格悬停效果:https://codepen.io/tr4553r7/pe…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信