2014-04-03 1 views
0

У меня есть многострочный текстовый файл Windows Form. Я хочу использовать Сдвиг + Enter Вместо того, чтобы использовать клавишу ввода, чтобы сделать новую строку в текстовом поле, и традиционный Enter ключ будет использоваться, чтобы сосредоточиться на следующем контроле. Я имею в виду сдвиг + Enter будет работать точно как Введите ключ на обычном многострочного текстового поля (Regard в текстовое поле MAXLENGTH -> Таким образом, вы не можете ввести новую строку, или текущий выбранный текст будет удалить при вставке новой строки, .. .).NET Multiline Textbox Сделать Shift + Enter вместо клавиши Enter

Я попытался переопределить OnKeyDown, чтобы вставить символ новой строки на сдвига + Enter, но он не работает, как я ожидал.

ответ

0

вам необходимо переопределить OnKeyDown и проверить ключ ввода с помощью свойства KeyCode KeyDownEvent.

Если вход был нажат, а свойство модификатора keydownevent не равно Keys.Shift, вам необходимо подавить нажатие клавиши. Вот документация о том, как это сделать:

http://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.suppresskeypress(v=vs.110).aspx

Если Shift + Enter прессовали вам нужно вставить Environment.NewLine в позиции курсора, а затем переместить курсор после вставленного Environment.NewLine. Вот как это сделать:

How to paste text in textbox current cursor?

+0

Многие благодарю вас за ваш совет. – totorochan

+0

Многие благодарю вас за ваш совет. Да, я переопределил OnkeyDown, чтобы обнаружить «Shift + Enter». И когда вставляем (вставляем) NewLine, я думаю, мы также должны учитывать Maxlength текстового поля и текущий выделенный текст. – totorochan

+0

никаких проблем, если мой ответ вам помог, пожалуйста, примите его (нажмите галочку). добро пожаловать в переполнение стека! –

0

Вот моя реализация в VB .NET.

Regard к MAXLENGTH в текстовое поле и текущий выбранный текст

Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs) 
     If (Me.Multiline AndAlso e.KeyData = (Keys.Shift Or Keys.Enter)) Then 
      Dim intRemainCharCount As Integer = Me.MaxLength - Me.Text.Length + Me.SelectedText.Length 

      '' Check if have enough space to place NewLine 
      If (Environment.NewLine.Length > intRemainCharCount) Then 
       MyBase.OnKeyDown(e) 
       Return 
      End If 

      Dim intPos = Me.SelectionStart 

      Me.Paste(Environment.NewLine) 

      '' Reset selection start (Reset cusor position) 
      Me.SelectionStart = intPos + Environment.NewLine.Length 

      e.Handled = True 
      e.SuppressKeyPress = True 
      Return 
     End If 

     MyBase.OnKeyDown(e) 
    End Sub 
0

Изменить свойство для Accept Return для Multiline даже не требует какого-либо кода, если у вас есть событие, прислушиваясь к KeyDown, в этом случае вы можете поставить условие для проверки фокусировки Textbox.