我有一个Windows窗体多行文本框。 我想使用 Shift + Enter 而不是使用Enter键在文本框中创建一个新行,而传统的 Enter 键将用于专注于下一个控制。 我的意思是 Shift + Enter 与普通多行文本框中的 Enter 键完全相同(关于textbox maxlength - >所以你不能输入换行符,或插入换行符时将删除当前选定的文本,...)
我试图覆盖OnKeyDown,在 Shift + Enter 上插入换行符,但它没有像我预期的那样工作。
答案 0 :(得分:0)
您需要使用KeyDownEvent的KeyCode属性覆盖OnKeyDown并检查输入密钥。
如果按下了enter并且keydownevent的修饰符属性不等于Keys.Shift,则需要禁止按键。以下是有关如何执行此操作的文档:
如果按下shift + enter,则需要在光标位置插入Environment.NewLine,然后在插入的Environment.NewLine后移动光标。以下是如何做到这一点:
答案 1 :(得分:0)
这是我在VB .NET中的实现。
关于文本框的最大长度和当前选定的文本
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
答案 2 :(得分:0)
更改Accept Return
的属性,因为Multiline甚至不需要编码任何内容,除非您有一个事件侦听KeyDown,在这种情况下您可以设置一个条件来检查Textbox
很专注。