Ничего не найдено с тех пор, как я задал вопрос, и придерживаюсь принципа «сделай сам»:
Я написал терминальный элемент управления в .NET.
http://wpfterminal.codeplex.com/
Вы можете увидеть пример на этом скриншоте (терминал интегрирован в более крупный проект):
http://images4.hiboox.com/images/4210/0a2809b63e05c3d0cac678962e0e3d5a.jpg
Основные механизмы
На самом деле то, что я сделал, былоопределить целое число lastPromptIndex
, и каждый раз, когда пользователь нажимает клавишу ВВОД и появляется новое приглашение, это значение обновляется.
После этого все просто, вам просто нужно обработать любой ввод текста, прежде чем текстовое поле подтвердит ввод.Если каретка текстового поля была расположена перед вашим lastPromptIndex
, вам необходимо вызвать ошибку (обычно звуковой сигнал), и вы должны сделать недействительным ввод текста, поэтому в текстовом поле ничего не пишется.Я также автоматически устанавливаю позицию каретки в конец текстового поля, чтобы пользователь мог сразу ввести некоторый текст.
Расширения
Вы можете включить завершение команды, выполнив поиск по клавише «ВВЕРХ»если каретка находится перед индексом подсказки и т. д. Вам просто нужно обработать входные события перед их отправкой во внутренние механизмы текстового поля.Я не знаю, позволяют ли это элементы управления SWT, но я уверен, что они это делают, как любая серьезная система пользовательского интерфейса.