2009-07-19 6 views
0

La définition de RichTextBox en tant que "ReadOnly" n'empêche pas les objets incorporés (comme les équations) d'être modifiés en double-cliquant dessus. Je pourrais désactiver le contrôle, mais il y a un fond gris (ne peut pas être simplement changé avec BackColor) et aucun moyen de faire défiler. J'ai essayé de surcharger OnDoubleClick dans une classe dérivée mais sans succès..NET Framework: Comment rendre RichTextBox true en lecture seule?

Répondre

0

Hmm ... Essayez simplement de régler Sellength sur 0 en double-clic. N'y at-il pas une propriété readonly/locked?

+0

Non. Il va traiter le double-clic sans mentionner la sélection. Et comme je l'ai dit "ReadOnly" propriété n'aide pas. –

3

J'ai trouvé une solution! :) Dans une classe dérivée:

protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == 0x0203) // WM_LBUTTONDBLCLK 
     { 
      // Do nothing 
     } 
     else 
     { 
      base.WndProc(ref m); 
     } 
    } 
+0

Solution intéressante ... –

0

Cela peut se faire comme suit

1) Définissez la propriété RichTextBox ReadOnly true

2) Aller à Propriétés-> Apparence-> BackColor et définir la couleur comme Fenêtre

+0

ou simplement définir la propriété locked à true –

2

J'ai eu un problème similaire et la réponse d'Entrase était un bon début. Malheureusement, le contrôle permettait toujours de sélectionner du texte et de le supprimer. J'ai fini par utiliser le code suivant:

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 
Questions connexes