vb.net formatting hook richtextbox paste

vb.net - Capture CTRL+V o pegue en un cuadro de texto en.NET



formatting hook (1)

VB.NET 2010: tengo un RichTextbox en el que el usuario puede ingresar datos manualmente o copiar / pegar desde otra fuente. Una vez que los datos estén completos, acierta y se resaltan algunas palabras clave. Mi problema es que si copia / pega de otra fuente también se copia el formato. Bueno, a veces la fuente externa tiene una fuente blanca y mi cuadro de texto tiene un fondo blanco, así que parece que no pegó nada y lo hace una y otra vez.

Lo que estoy buscando es una forma de interceptar la acción de pegar en el cuadro de texto para poder tomar ese texto y pegarlo como ASCII puro sin formatear.

Editar después de experimentar con 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

Esto parece funcionar y todo mi texto queda retenido y todo es ASCII. Creo que si quisiera dar un paso más, también podría tomar la fuente y el color de mi RichTextbox, seleccionar todo el texto y luego asignar la fuente y el color a la selección.


En la mayoría de los casos, examinar el evento KeyDown debería ser lo suficientemente bueno junto con el uso de un RichTextBox temporal para modificar el texto entrante:

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

Nota: Falta la comprobación de errores.