.NET Framework: Как сделать RichTextBox доступным только для чтения? - PullRequest
0 голосов
/ 19 июля 2009

Установка RichTextBox как «ReadOnly» не препятствует редактированию встроенных объектов (например, уравнений) двойным щелчком по ним. Я мог бы отключить элемент управления, но тогда есть серый фон (его нельзя просто изменить с помощью BackColor) и нет способа прокрутки. Я попытался переопределить OnDoubleClick в производном классе, но безуспешно.

Ответы [ 4 ]

3 голосов
/ 19 июля 2009

Я нашел решение! :) В производном классе:

protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x0203) // WM_LBUTTONDBLCLK
        {
            // Do nothing
        }
        else
        {
            base.WndProc(ref m);
        }
    }
2 голосов
/ 10 мая 2012

У меня была похожая проблема, и ответ от 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
0 голосов
/ 19 марта 2012

Это можно сделать следующим образом

1) Установите для свойства RichTextBox ReadOnly значение true

2) Перейдите в Свойства-> Внешний вид-> BackColor и установите цвет Окно

0 голосов
/ 19 июля 2009

Хмм ... Просто попробуйте установить Sellength на 0 при двойном щелчке. Нет ли свойства только для чтения / блокировки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...