У меня была похожая проблема, и ответ от Entrase был хорошим началом. К сожалению, элемент управления все еще позволяет выделять текст и удалять его. В итоге я использовал следующий код:
Public Class ReadOnlyRichTextBox : Inherits Windows.Forms.RichTextBox
Protected mOkayKeys As Windows.Forms.Keys() = {Windows.Forms.Keys.Up, Windows.Forms.Keys.Down, Windows.Forms.Keys.PageUp, Windows.Forms.Keys.PageDown}
Private Sub ReadOnlyRichTextBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.Control And (e.KeyCode = Windows.Forms.Keys.C) Then
Exit Sub
End If
If Not mOkayKeys.Contains(e.KeyCode) Then e.Handled = True
End Sub
Private Sub ReadOnlyRichTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
e.Handled = True
End Sub
Private Sub ReadOnlyRichTextBox_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
If e.Control And (e.KeyCode = Windows.Forms.Keys.C) Then
Exit Sub
End If
If Not mOkayKeys.Contains(e.KeyCode) Then e.Handled = True
End Sub
Protected Overrides Sub WndProc(ByRef m As Windows.Forms.Message)
If (m.Msg = &H203) Then ' WM_LBUTTONDBLCLK=0x0203
' Do nothing
Else
MyBase.WndProc(m)
End If
End Sub
End Class