.NET Multiline Textbox使Shift + Enter工作而不是Enter键

时间:2014-04-03 02:05:12

标签: textbox newline multiline shift enter

我有一个Windows窗体多行文本框。 我想使用 Shift + Enter 而不是使用Enter键在文本框中创建一个新行,而传统的 Enter 键将用于专注于下一个控制。 我的意思是 Shift + Enter 与普通多行文本框中的 Enter 键完全相同(关于textbox maxlength - >所以你不能输入换行符,或插入换行符时将删除当前选定的文本,...)

我试图覆盖OnKeyDown,在 Shift + Enter 上插入换行符,但它没有像我预期的那样工作。

3 个答案:

答案 0 :(得分:0)

您需要使用KeyDownEvent的KeyCode属性覆盖OnKeyDown并检查输入密钥。

如果按下了enter并且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?

答案 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很专注。