Как создать консоль usercontrol - PullRequest
0 голосов
/ 11 июля 2011

Мне нужно создать пользовательский контроллер "Консоль".

Я столкнулся с такими проблемами:

  • Если я использую TextBox, как я могу предотвратить удаление уже набранной команды?

  • Если я использую ListBox / ListView, как мне выделить весь текст?

Скажите, пожалуйста, что делать с консоли.

Консоль должна иметь возможность выполнить команду (нажав клавишу Tab), разрешить выделение текста и предотвратить ввод уже установленных команд.

Ответы [ 3 ]

2 голосов
/ 02 декабря 2012

Вот начало:

http://ansiconsole.codeplex.com

Я использовал растровое изображение и отображал на нем текст. Таким образом, у меня есть полный контроль над вводом и выводом.

1 голос
/ 11 июля 2011
  1. Если вам нужно какое-то «простое» консольное приложение: вставьте команды, я полагаю, на каком-нибудь языке DSL, просмотрите результат выполнения и другие вещи, вы можете попробовать программировать на основе RichTextBox, что также может придать стилю некоторый стиль.
  2. Повторное использование некоторых уже готовых (сложных) редакторов, например:

Scintilla

И работайте над тем, чтобы ограничить возможности такого рода компонента в соответствии с вашими потребностями.

Привет.

0 голосов
/ 11 июля 2011

Вы можете рассмотреть возможность получения из элемента управления RichTextBox, как предложил Тигран.

В зависимости от того, что вы хотите, чтобы пользователь мог делать, вам придется добавить туда некоторую логику, которая ограничивает то, что он может и не может выбирать. (Например, если вы не хотите, чтобы они выбирали предыдущие команды). Вы можете получить выбранный текст через свойство SelectedText . А затем вставьте в свою собственную логику, например, Ctrl + C скопирует текст в переменную.

Вы можете рассмотреть возможность использования свойства MaximumSize, чтобы старые команды были удалены после того, как консоль станет такой большой.

У Winforms уже есть тип автозаполнения, который вы можете использовать или просто сохранить список ключевых слов, и когда пользователь нажимает TAB, введите первое слово в вашем списке, которое начинается с того, что они уже набрали.

Чтобы получить саму команду, а не какой-либо предыдущий текст, который был введен, вы, вероятно, захотите перенести все с последней строки до конца. Код может выглядеть примерно так:

String allText = this.richTextBox1.Text;           // All the text from the rich text box
Int32 lastIndex = allText.LastIndexOf("\n");       // Find the position of the last newline
String command = allText.Substring(lastIndex + 1); // Substring starting at the character after the last newline

И, конечно, когда пользователь нажимает RETURN, команда будет отправлена ​​на ваш код и выполнена.

...