2010-01-06 5 views
2

Я работаю над проектом, который я использую текстовое поле в качестве терминала telnet. Терминал имеет «->» в качестве командной строки в текстовом поле. Есть ли способ отключить удаление или резервное копирование, когда оно достигнет приглашения «->»?C# текстовое поле удаление вопрос

Я не хочу удалять командную строку.

Благодаря

+0

Установить e.SuppressKeyPress = true в обработчике событий KeyDown. Вы управляете клавишами со стрелками? –

+0

Теперь я не манипулирую клавишами со стрелками. – user195678

ответ

2

два варианта:

  1. Сделать приглашение ("->") изображения или метки, вместо того, чтобы быть частью текстового поля.
  2. Если это веб-приложение, обработайте событие с измененным текстом в javascript и отмените изменение текста, если оно представляет собой удаление приглашения. Если это не веб-приложение, сделайте то же самое в C#, а не в JS.
4

Dave is right.

Лучший способ сделать это - сделать ярлык в левой части текстового поля, который говорит ->. Вы можете удалить границу текстового поля и поместить их в белый (или не белый) ящик, чтобы он выглядел реальным.

Это будет намного проще для вас в разработке и обслуживании, а также будет более удобным для пользователя. (Например, ключ Home будет вести себя лучше)

+1

+1 - Помимо домашнего ключа, также учитывайте взаимодействие с мышью, например, выбирая весь текст, а затем вставляя что-то из буфера обмена и другие подобные действия. –

+0

Почему правая сторона? Разве подсказка не появляется всегда в начале строки, расположенной слева? Нам также необходимо обновить положение метки как больше данных, поступающих из telnet-сокета? – user195678

+0

Я имел в виду левую сторону; Прости. Есть ли у вас один многострочный текстовый ящик, содержащий как приглашение, так и входящие данные? – SLaks

0

Вы всегда можете убедиться, что при удалении, индекс символа вы удаляете> 1 (так -> будет занимать позиции 0 & 1)

+1

У этого будут проблемы, если кто-то добавит символы перед подсказкой – wprl

+1

Правда, я предполагаю, что я предполагал, что там не будут допущены никакие символы. Лучший выбор - сделать ярлык. – taylonr

0

Это наивный пример, но вы должны понять это. Вы можете достигнуть максимума при событии keydown и отменить его, когда это необходимо.

private void testTextBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Back && testTextBox.SelectionStart == 2) 
    { 
     e.SuppressKeyPress = true; 
    } 
} 
+2

Здесь так много угловых случаев, что я вряд ли думаю, что это стоит усилий. Некоторые примеры: CTRL + A, за которым следует DEL, щелкните правой кнопкой мыши -> Выбрать все, затем щелкните правой кнопкой мыши -> Удалить, команды вырезать/вставить и т. Д. Список можно сделать довольно длинным ... –

Смежные вопросы