【问题标题】:.NET Multiline Textbox Make Shift+Enter working instead of Enter key.NET 多行文本框使 Shift+Enter 工作而不是 Enter 键
【发布时间】:2014-04-03 02:05:12
【问题描述】:

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

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

【问题讨论】:

    标签: textbox newline multiline shift enter


    【解决方案1】:

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

    如果按下 enter 并且 keydownevent 的 modifiers 属性不等于 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?

    【讨论】:

    • 非常感谢您的建议。是的,我已经覆盖 OnkeyDown 来检测“Shift+Enter”。而在插入(粘贴)NewLine时,我认为我们还必须考虑文本框的Maxlength和当前选定的文本。
    • 没问题,如果我的回答对你有帮助,请采纳(点对勾)。欢迎堆栈溢出!
    【解决方案2】:

    这是我在 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
    

    【讨论】:

      【解决方案3】:

      为 Multiline 更改 Accept Return 的属性甚至不需要编写任何代码,除非您有监听 KeyDown 的事件,在这种情况下,您可以设置一个条件来检查 Textbox 是否已聚焦。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-24
        • 2019-05-12
        • 1970-01-01
        • 2017-09-12
        • 2021-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多