捕获CTRL + V或在.NET中的文本粘贴(Capture CTRL+V or paste in

2019-08-22 02:42发布

VB.NET 2010 - 我有一个RichTextBox,其中用户可以手动从另一源输入数据或复制/粘贴。 数据完成后他打去几个关键词将突出显示。 我的问题是,如果他复制/从其他来源粘贴的格式也被复制。 那么有时外面源有一个白色的字体和文本框我有一个白色的背景,因此它看起来就像他粘贴不信邪,他一次又一次地做它。

我正在寻找的是拦截粘贴动作到文本框中,这样我可以采取文字,并将其粘贴为纯ASCII格式没有一种方式。

与试验的KeyDown后编辑

Private Sub txtRch_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtRch.KeyDown
    If e.Modifiers = Keys.Control AndAlso e.KeyCode = Keys.V Then
        With txtRch
            Dim i As Integer = .SelectionStart          'cache the current position
            .Select(0, i)                               'select text from start to current position
            Dim s As String = .SelectedText             'copy that text to a variable
            .Select(i, .TextLength)                     'now select text from current position to end
            Dim t As String = .SelectedText             'copy that text to a variable
            Dim u As String = s & Clipboard.GetText(TextDataFormat.UnicodeText) & t 'now concatenate the first chunk, the new text, and the last chunk
            .Clear()                                    'clear the textbox
            .Text = u                                   'paste the new text back into textbox
            .SelectionStart = i                         'put cursor back to cached position
        End With

        'the event has been handled manually
        e.Handled = True
    End If
End Sub

这似乎工作,我所有的文字被保留,其所有的ASCII。 我想,如果我想采取了一步,我也可以把我的的RichTextbox字体和前景色,选择所有文本,然后指定字体和前景色的选择。

Answer 1:

在大多数情况下,检查KeyDown事件应该是足够好的使用临时RichTextBox的修改进入文本一起:

Private Sub RichTextBox1_KeyDown(sender As Object, e As KeyEventArgs) _
                                 Handles RichTextBox1.KeyDown
  If e.Modifiers = Keys.Control AndAlso e.KeyCode = Keys.V Then

    Using box As New RichTextBox
      box.SelectAll()
      box.SelectedRtf = Clipboard.GetText(TextDataFormat.Rtf)
      box.SelectAll()
      box.SelectionBackColor = Color.White
      box.SelectionColor = Color.Black
      RichTextBox1.SelectedRtf = box.SelectedRtf
   End Using

   e.Handled = True
  End If
End Sub

注:缺少任何错误检查。



文章来源: Capture CTRL+V or paste in a textbox in .NET