Die Einstellung von RichTextBox als "ReadOnly" verhindert nicht, dass eingebettete Objekte (wie Gleichungen) durch Doppelklicken bearbeitet werden. Ich könnte das Steuerelement deaktivieren, aber dann gibt es einen grauen Hintergrund (kann nicht nur mit BackColor geändert werden) und keine Möglichkeit zum Scrollen. Ich habe versucht, OnDoubleClick in einer abgeleiteten Klasse zu überschreiben, aber keinen Erfolg..NET Framework: Wie RichTextBox True schreibgeschützt?
Antwort
Hmm ... Versuchen Sie einfach Slenlength auf 0 auf Doppelklick. Gibt es keine Eigenschaft readonly/locked?
Ich habe eine Lösung gefunden! :) In einer abgeleiteten Klasse:
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0203) // WM_LBUTTONDBLCLK
{
// Do nothing
}
else
{
base.WndProc(ref m);
}
}
Interessante Lösung ... –
Dies kann als
folgt1), um die RichTextBox Eigenschaft Readonly Wird auf true gesetzt
2) erfolgt Zur Eigenschaften-> Erscheinung-> Backcolor und setze Farbe als Fenster
oder legen Sie einfach die gesperrte Eigenschaft auf True –
Ich hatte ein ähnliches Problem und die Antwort von Entrase war ein guter Anfang. Leider hat das Steuerelement immer noch erlaubt, Text auszuwählen und zu löschen. Ich habe den folgenden Code verwendet:
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
Nein. Es wird Doppelklick verarbeiten, ohne die Auswahl zu erwähnen. Und wie gesagt "ReadOnly" Eigenschaft hilft nicht. –