Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET Framework:如何使RichTextBox成为真正的只读?_.net_Richtextbox_Readonly - Fatal编程技术网

.NET Framework:如何使RichTextBox成为真正的只读?

.NET Framework:如何使RichTextBox成为真正的只读?,.net,richtextbox,readonly,.net,Richtextbox,Readonly,将RichTextBox设置为“ReadOnly”不会阻止双击嵌入对象(如方程)进行编辑。我可以禁用控件,但是有一个灰色的背景(不能只是改变背景色),无法滚动。我试图在派生类中重写OnDoubleClick,但没有成功。嗯。。。只需在双击时尝试将Sellength设置为0。没有只读/锁定属性吗?嗯。。。只需在双击时尝试将Sellength设置为0。难道没有只读/锁定属性吗?我找到了一个解决方案!:)在派生类中: protected override void WndProc(ref Messag

将RichTextBox设置为“ReadOnly”不会阻止双击嵌入对象(如方程)进行编辑。我可以禁用控件,但是有一个灰色的背景(不能只是改变背景色),无法滚动。我试图在派生类中重写OnDoubleClick,但没有成功。

嗯。。。只需在双击时尝试将Sellength设置为0。没有只读/锁定属性吗?

嗯。。。只需在双击时尝试将Sellength设置为0。难道没有只读/锁定属性吗?

我找到了一个解决方案!:)在派生类中:

protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x0203) // WM_LBUTTONDBLCLK
        {
            // Do nothing
        }
        else
        {
            base.WndProc(ref m);
        }
    }
我找到了解决办法!:)在派生类中:

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

这可以按如下方式进行

1) 将RichTextBox属性ReadOnly设置为true


2) 转到属性->外观->背景色并将颜色设置为窗口

这可以按如下方式完成

1) 将RichTextBox属性ReadOnly设置为true


2) 转到属性->外观->背景色并将颜色设置为窗口

我遇到了类似的问题,来自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

我有一个类似的问题,恩特雷斯的回答是一个好的开始。不幸的是,控件仍然允许选择文本并将其删除。我最终使用了以下代码:

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

不。它将处理双击而不提及选择。正如我所说,“只读”属性没有帮助。它将处理双击而不提及选择。正如我所说的,“ReadOnly”属性没有帮助,或者只是将locked属性设置为true,或者只是将locked属性设置为true