【问题标题】:Is a console user interface in .net possible? [closed].net 中的控制台用户界面是否可能? [关闭]
【发布时间】:2011-07-02 01:15:12
【问题描述】:

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

  • 浏览菜单
  • 响应对话框

然后应用程序会显示几行文本。

可以证明,此类应用程序中的 GUI 可以毫无问题地映射到相应的 CUI。

那么,如果必须坚持使用控制台,那么是否有任何 .NET 工具可以让您轻松编写此类 CUI?

EDIT1

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

  • 基于字符的图形,如旧超市终端
  • 完全基于文本。

第一个选项允许将字符放置在控制台窗口的任意位置。 ncurses 是 *nix 系统的低级库,允许执行此类操作。以这种方式创建的 CUI 可以非常有表现力和方便,但为了我们的讨论,让我也排除这个选项,因为远程控制台不太可能支持在控制台窗口中移动的能力。

因此,这给我们留下了基于文本的 CUI,它是通过 printf 和仅 scanf(以及类似方法)创建的。

EDIT2

另一个澄清:我在问题中提到了 Windows 窗体作为简单用户界面的示例,它没有什么特别之处不能转换为基于文本的控制台 UI。这只是为了说明菜单和模式对话框等简单的 GUI 元素可以在控制台中建模,而无需借助窗口。

【问题讨论】:

  • Hello World 之外的任何稍微复杂的 WinForms 应用程序都将是通过 CLI 导航的噩梦。不确定这是一个假设性问题还是您想要实施的想法......如果这是一个实施想法,我会寻找其他替代方案。
  • 不清楚您要做什么。您是在尝试编写基于字符的 GUI、支持菜单的命令行应用程序还是完全其他的东西?
  • 我也不清楚你在追求什么。我的第一次阅读认为您希望 WinForms 控件具有将自身呈现为文本的替代能力。
  • 您想要一个基于提示的界面吗? (类似于 DOS/命令提示符)
  • For instance, imagine a WinForms application, where the user can: Navigate the menus Respond to dialogs And the application in return displays several lines of text. but for the sake of our discussion let me rule this option out as well,。你很有趣,你知道吗? 想象一下... 现在算了吧! :-)

标签: .net windows console console-application


【解决方案1】:

Mono 诅咒怎么样。 http://www.mono-project.com/MonoCurses

【讨论】:

  • +1 因为虽然不完整(它不支持鼠标),但我可以找到它的用途。
  • Curses 总的来说是个好东西,但它不适合我,因为远程控制台可能不允许使用光标位置。
  • 我要补充一点,将其转换为使用转义序列应该很容易。您必须将 Console 类替换为使用转义序列的 Console 类。如果你有一个终端来测试它,我认为这是两到三天的工作(如果他们使用了 Console 类的话)。
  • @mark,为什么你认为远程控制台不能传递简单的 ANSI 命令?这就是 curses 实际上在做的事情。至少应在任何地方支持 VT100 命令。不需要额外的工作。
  • @mark 我的意思是,您是否尝试过启动其中一个 Mono Curses 演示并查看它们是否可以远程工作?当您启动一个 msbuild(我的 msbuild 非常有色)时,您看到颜色了吗?如果您远程启动 PowerShell,您是否看到它带有蓝色背景和白色字符,并且错误以黑底红字书写?如果是,则 psexec 支持颜色。要检查它是否支持光标移动,您必须编写一个小程序。
【解决方案2】:

Forms for Console Apps呢?

另一种(又名丑陋的解决方法)解决方案可能是创建一个 Web 应用程序(这将使您的 UI 更加灵活)并使用 browser which runs under DOS 访问它。该 Web 应用程序可以托管在外部 Web 服务器 (IIS) or hosted in your console application 上,该服务器还可以在启动时启动基于 DOS 的浏览器,以方便用户使用。

【讨论】:

  • +1 因为很漂亮。
  • +1 对于一个有趣的链接,但在远程控制台上任意放置光标的能力并不总是可用的。最安全的是基于提示的界面。至于网络服务 - 不错的概念,但有点矫枉过正,你不觉得吗?
【解决方案3】:

看看 consolemenuui.codeplex.com。除了菜单(加上 Yes-No 对话框和应该易于实现的值提示)之外,我几乎无法想象其他可能的基于提示的控件。

【讨论】:

    【解决方案4】:

    一种典型的方法是将您的应用程序分成两部分:一个可以通过 CLI 操作的后端和一个 GUI 前端(可能不止一个,例如 web、winforms、纯文本 CLI 等等)。它们可以使用简单的协议或 DSL 进行通信——前端要求后端执行命令,后端强制前端依次执行命令(因此,协议必须是异步的)。如果需要一些复杂的可视化,仍然可以在后端准备并在前端执行。当然,要避免采用这种方式的一个明显的事情是流式传输视频。

    这种设计最好的例子可能是 Wolfram Mathematica。

    因此,回答您的问题,您不需要任何特定的库,这是设计问题,编码本身是微不足道的。您可能需要的唯一东西是可以简化 DSL 实现的工具。 Antlr 很好,但是使用 C# 可以很容易地解析简单的语言,而无需任何外部解析器生成器。

    【讨论】:

      【解决方案5】:

      您可以尝试将自己隐藏的控制台窗口的输出捕获/重定向到应用程序的 Windows 窗体。获得所需文本后,您可以使用PictureBox.DrawString 或类似方法打印。

      Here's more info 关于如何捕获/重定向控制台输出。

      【讨论】:

      • 后台没有windows窗体应用程序。
      【解决方案6】:

      有一个很棒的库用于处理命令行选项,称为NDesk.Options。包含在 Mono 中,它也被称为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 编程的库,我没有找到,但我很想听听。

      【讨论】:

      • 我一直都知道并使用 NDesk.Options。对于命令行选项确实很棒,但与 CUI 无关。
      【解决方案7】:

      可能是这样的?

      我是 C# 和一般编码的新手,但从小就使用 c64 并且喜欢复古风格,所以我正在编写一个矫枉过正的记事本/控制台程序。它使用数组和围绕它的框绘制菜单,文本文件也是如此。

      【讨论】:

      • 努力,这实际上是我正在寻找的。你打算在 GitHub 上托管任何代码/库吗?我认为分享您的知识和经验会很棒,是的,我是个复古的孩子,也是在一些旧电脑上长大的(当时计算很有趣)
      【解决方案8】:

      这是一个库 (Console.Forms) 的链接,它试图创建一个等效于 System.Windows.Forms 的控制台:

      https://code.google.com/p/console-forms/

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      相关资源
      最近更新 更多