我想知道是否有.NET中的库,可以很容易地编写控制台用户界面。 例如,想象一个WinForms应用程序,用户可以:
反过来,应用程序显示几行文字。
可以看出,这种应用程序中的GUI可以毫无问题地映射到相应的CUI。
所以,我的问题是,如果必须坚持控制台(请考虑一个给定的),那么有没有任何.NET工具,让这样的CUI轻松写?
当然,我明白我自己可以发展,但这不是问题,所以请不要提出这个问题。
EDIT1
让我来定义一个约束,这将有助于人们掌握CUI的概念。 设想一台机器,你可以打开一个远程控制台,但不是RDS。 因此,在该机器上远程运行GUI应用程序是不可能的,因为它将无法打开任何窗口。 但是,可以有一个远程控制台,给我们留下两种可能的CUI风格:
第一个选项允许在控制台窗口的任意位置放置字符。 ncurses是* nix系统的低级库,允许做这样的事情。 以这种方式创build的CUI可以非常富有performance力和方便,但是为了讨论的方便,我们也要规定这个选项,因为远程控制台不太可能支持在控制台窗口中移动的能力。
所以,这给我们留下了基于文本的CUI,只有通过printf
和scanf创build的文本(和相似)。
EDIT2
又一个澄清。 我在这个问题中提到了Windows Forms作为一个简单的用户界面的例子,它没有什么特别的,不能被翻译成基于文本的控制台UI。 这只是为了说明简单的GUI元素(如菜单和模式对话框)可以在控制台中进行build模,而不必诉诸于Windows。 而已。
看看consolemenuui.codeplex.com 。 除了菜单(加上是 – 没有对话框和值提示应该很容易实现),我几乎无法想象其他可能的基于提示的控制。
表单控制台应用程序怎么样?
另一种方法(丑陋的解决方法)可能是创建一个Web应用程序(这将给你更多的灵活性,在你的用户界面),并访问它在DOS下运行的浏览器 。 该Web应用程序可以驻留在外部Web服务器(IIS)上, 也可以托管在控制台应用程序中 ,也可以在启动时启动基于DOS的浏览器,以方便用户使用。
一个典型的方法是将应用程序分为两部分:可以通过CLI操作的后端,以及GUI前端(可以是多个,例如web,winforms,纯文本CLI等等)。 他们可以使用一个简单的协议进行通信,或者DSL前端要求后端执行命令,后端强制前端依次执行命令(所以协议必须是异步的)。 如果需要一些复杂的可视化,则仍然可以在后端进行准备并在后台执行。 当然,避免这样做的一个显而易见的事情就是流式视频。
Wolfram Mathematica可能是这种设计的最好例子。
所以,回答你的问题,你不需要任何特定的库,这是一个设计问题,编码本身是微不足道的。 您可能需要的唯一一件工具将简化您的DSL实施。 Antlr很好,但是用C#就可以轻松解析简单的语言,而无需任何外部的解析器生成器。
您可以尝试将自己隐藏的控制台窗口的输出捕获/重定向到应用程序的Windows窗体。 一旦你有你需要的文本,你可以用PictureBox.DrawString
或类似的方法打印它。
以下是有关如何捕获/重定向控制台输出的更多信息 。
有一个很棒的库来处理命令行选项,叫做NDesk.Options
。 被纳入单声道,它也被称为Mono.Options
。
它不提供任何额外的交互功能,但是这是我发现从.NET应用程序优雅地处理控制台。
string data = null; bool help = false; int verbose = 0; var p = new OptionSet { { "file=", v => data = v }, { "v|verbose", v => { ++verbose } }, { "h|?|help", v => help = v != null }, }; List<string> extra = p.Parse (args);
至于封装控制台UI编程的库,我没有找到任何,虽然我想听一个。
这是一个链接到一个库(Console.Forms),试图创建一个相当于System.Windows.Forms的控制台:
https://code.google.com/p/console-forms/
这是远远没有完成,但我认为这是朝着你说的方向。 虽然有标签和半成品的文本框,但还没有菜单。 它确实演示了在主窗体前面打开一个对话框。
这样的事情可能吗?
新的C#和编码一般,但长大了一个C64和喜欢复古的风格,所以即时通讯编写一个矫枉过正的memopad / consoleprogram。 它使用一个数组和一个方框来绘制一个菜单,文本文件也一样。
希望我更好地了解这个网站,并发布此窗口。 可以花几个小时来形成一个帖子:O