Является консольным пользовательским интерфейсом in.net возможно? [закрытый]

Мне интересно, есть ли библиотеки в .NET, которые позволяют легко писать консольные пользовательские интерфейсы. Например, представьте себе приложение WinForms, где пользователь может:

  • перейдите в меню
  • ответить на диалоги

и приложение в ответ отображает несколько строк текста.

можно показать, что GUI в таком приложении может быть сопоставлен с соответствующим CUI без каких-либо проблем.

Так, если нужно придерживаться консоли, тогда есть ли какие-либо инструменты .NET, чтобы легко написать такой CUI?

EDIT1

позвольте мне определить ограничение, которое должно помочь людям понять идею CUI. Представьте себе машину, на которой можно открыть удаленную консоль, но не RDS. Таким образом, запуск приложения GUI удаленно на этой машине не может быть и речи, потому что он не сможет открыть любое окно. Тем не менее, можно иметь удаленную консоль, оставив нас с двумя возможные ароматы CUI:

  • графика на основе символов, как старые терминалы супермаркетов
  • полностью текст на основе.

первые опции позволяют размещать символы в произвольных положениях в окне консоли. ncurses-это низкоуровневая библиотека для систем *nix, которая позволяет делать такие вещи. CUI, созданный таким образом, может быть довольно выразительным и удобным, но ради нашего обсуждения позвольте мне также исключить этот вариант, потому что удаленная консоль вряд ли будет поддерживать возможность перемещения по окну консоли.

Итак, это оставляет нас с текстовым CUI, созданным с помощью printf и только scanf (и тому подобное).

EDIT2

еще одно уточнение: я упоминаю Windows Forms в вопросе как пример простого пользовательского интерфейса, который не имеет ничего особенного, что не может быть переведено на текстовый интерфейс консоли. Это только для того, чтобы проиллюстрировать, что просто Элементы GUI, такие как меню и модальные диалоги, могут быть смоделированы в консоли, не прибегая к windows.

8 ответов


взгляните на consolemenuui.codeplex.com. Кроме меню (плюс диалоговые окна "Да-нет" и подсказки значений, которые должны быть просты в реализации), я вряд ли мог представить другие возможные элементы управления на основе подсказок.


Как насчет моно проклятий. http://www.mono-project.com/MonoCurses


насчет формы для консольных приложений?

альтернативным (он же уродливый обходной путь) решением может быть создание веб-приложения (которое даст вам больше гибкости над вашим пользовательским интерфейсом) и доступ к нему с помощью браузер, который работает под DOS. Это веб-приложение может быть размещено на внешнем веб-сервере (IIS),или размещено в консольном приложении который также может запустить браузер на основе DOS на запуск для удобства пользователя.


типичным подходом является разделение вашего приложения на две части: бэкэнд, который может работать через CLI, и интерфейс GUI (может быть более одного, например, web, winforms, чистый текстовый CLI, что угодно). Они могут взаимодействовать с помощью простого протокола, или DSL-интерфейс запрашивает бэкэнд для выполнения команд, а бэкэнд заставляет интерфейс выполнять команды по очереди (таким образом, протокол должен быть асинхронным). Если требуется какая-то сложная визуализация, ее можно подготовить в backend и выполнить в frontent. Очевидная вещь, чтобы избежать этого, - это потоковое видео, конечно.

вероятно, лучшим примером такой конструкции является Wolfram Mathematica.

Итак, отвечая на ваш вопрос, вам не понадобятся какие-либо конкретные библиотеки, это вопрос дизайна, само кодирование тривиально. Единственное, что вам может понадобиться, это инструмент, который упростит вашу реализацию DSLs. Antlr просто отлично, но с C# легко анализировать простые языки без каких-либо генераторы внешнего парсера.


вы можете попытаться захватить / перенаправить вывод собственного скрытого окна консоли в Windows Forms ваших приложений. Если у вас есть текст, вы можете распечатать его с PictureBox.DrawString или аналогичным способом.

вот больше информации о том, как захватить/перенаправить вывод консоли.


есть замечательная библиотека для обработки параметров командной строки, называется 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-Программирование, я их не нашел, хотя хотел бы услышать об одном.


Это ссылка на библиотеку (консоли.Forms), который пытается создать консоль, эквивалентную System.Окна.Формы:

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

Он далек от завершения, но я думаю, что он идет в том направлении, о котором вы говорите. Хотя есть метки и наполовину законченное текстовое поле, меню еще нет. Он демонстрирует открытие диалога перед основной формой.


что-то вроде этого возможно?

ConsoleRaw Example Image

Я новичок в C# и кодировании в целом, но вырос с c64 и люблю ретро-стиль, поэтому я пишу чрезмерную memopad/consoleprogram. Он рисует меню, используя массив и поле вокруг него, то же касается текстовых файлов.