2009-07-19 7 views
0

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

0

Hmm ... Versuchen Sie einfach Slenlength auf 0 auf Doppelklick. Gibt es keine Eigenschaft readonly/locked?

+0

Nein. Es wird Doppelklick verarbeiten, ohne die Auswahl zu erwähnen. Und wie gesagt "ReadOnly" Eigenschaft hilft nicht. –

3

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); 
     } 
    } 
+0

Interessante Lösung ... –

0

Dies kann als

folgt

1), um die RichTextBox Eigenschaft Readonly Wird auf true gesetzt

2) erfolgt Zur Eigenschaften-> Erscheinung-> Backcolor und setze Farbe als Fenster

+0

oder legen Sie einfach die gesperrte Eigenschaft auf True –

2

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