控制台用户界面在.net – 是否有可能?

我想知道是否有.NET中的库,可以很容易地编写控制台用户界面。 例如,想象一个WinForms应用程序,用户可以:

  • 导航菜单
  • 回应对话

反过来,应用程序显示几行文字。

可以看出,这种应用程序中的GUI可以毫无问题地映射到相应的CUI。

所以,我的问题是,如果必须坚持控制台(请考虑一个给定的),那么有没有任何.NET工具,让这样的CUI轻松写?

当然,我明白我自己可以发展,但这不是问题,所以请不要提出这个问题。

EDIT1

让我来定义一个约束,这将有助于人们掌握CUI的概念。 设想一台机器,你可以打开一个远程控制台,但不是RDS。 因此,在该机器上远程运行GUI应用程序是不可能的,因为它将无法打开任何窗口。 但是,可以有一个远程控制台,给我们留下两种可能的CUI风格:

  • 基于字符的graphics,像老超市terminal
  • 完全基于文本。

第一个选项允许在控制台窗口的任意位置放置字符。 ncurses是* nix系统的低级库,允许做这样的事情。 以这种方式创build的CUI可以非常富有performance力和方便,但是为了讨论的方便,我们也要规定这个选项,因为远程控制台不太可能支持在控制台窗口中移动的能力。

所以,这给我们留下了基于文本的CUI,只有通过printf和scanf创build的文本(和相似)。

EDIT2

又一个澄清。 我在这个问题中提到了Windows Forms作为一个简单的用户界面的例子,它没有什么特别的,不能被翻译成基于文本的控制台UI。 这只是为了说明简单的GUI元素(如菜单和模式对话框)可以在控制台中进行build模,而不必诉诸于Windows。 而已。

看看consolemenuui.codeplex.com 。 除了菜单(加上是 – 没有对话框和值提示应该很容易实现),我几乎无法想象其他可能的基于提示的控制。

如何单声道诅咒。 http://www.mono-project.com/MonoCurses

表单控制台应用程序怎么样?

另一种方法(丑陋的解决方法)可能是创建一个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/

这是远远没有完成,但我认为这是朝着你说的方向。 虽然有标签和半成品的文本框,但还没有菜单。 它确实演示了在主窗体前面打开一个对话框。

这样的事情可能吗?

ConsoleRaw示例图像

新的C#和编码一般,但长大了一个C64和喜欢复古的风格,所以即时通讯编写一个矫枉过正的memopad / consoleprogram。 它使用一个数组和一个方框来绘制一个菜单,文本文件也一样。

希望我更好地了解这个网站,并发布此窗口。 可以花几个小时来形成一个帖子:O