C#、VB.Net RichTextBox变更文件文本内容的方法,并且通过重写实现不闪屏的效果

郑鹏飞3年前爱T1051

C#、VB.Net RichTextBox变更文件文本内容的方法。

使用RichTextBox控件时,免不了需要变更文件中的内容。

本文采用的办法是使用 SelectionStart、SelectionLengthSelectedText三个方法进行变更。

同时重写RichTextBox,给出解决在变更时可能出现短暂的蓝底选择字符画面的办法。


    Private Sub ReplaceTextBox(pStart As Integer, pLength As Integer, pStr As String)
        Try
            JMyBox1.SelectionStart = pStart
            LockPaint() '停止屏幕更新RichTextBox
            JMyBox1.SelectionLength = pLength
            RePaint() '恢复屏幕更新RichTextBox
            If pStr = "" Then
                '可能是我水平不行,哪里设置不对,或者是原生RichTextBox的问题
                '导致如果pStr=""时未能成功更新,但更新为vbNullChar时却能成功
                JMyBox1.SelectedText = vbNullChar
            Else
                JMyBox1.SelectedText = pStr
            End If
        Catch ex As Exception

        End Try
    End Sub
    
    Private Sub LockPaint()
        JMyBox1.LockPaint()
    End Sub
    Private Sub RePaint()
        JMyBox1.RePaint()
    End Sub

重写RichTextBox:此模块参考某度搜索

Public Class jMyBox
    Inherits RichTextBox
    Private Class paintHelper
        Inherits Control
        Public Sub DefaultWndProc(ByRef m As Message)
            DefWndProc(m)
        End Sub
    End Class
    Private Const WM_PAINT As Integer = &H000F
    Private pHelp As New paintHelper
    Private iLockPaint As Boolean
    Public Sub LockPaint()
        iLockPaint = True
    End Sub
    Public Sub RePaint()
        iLockPaint = False
    End Sub
    Protected Overrides Sub WndProc(ByRef m As Message)
        Select Case m.Msg
            Case WM_PAINT
                If iLockPaint Then
                    pHelp.DefaultWndProc(m)
                    Exit Sub
                End If
                MyBase.WndProc(m)
                Exit Sub
        End Select
        MyBase.WndProc(m)
    End Sub
End Class

1、重写RichTextBox的原因,是因为在使用Selection...方法更改内容时,在运行了

            JMyBox1.SelectionLength = pLength

代码时,当文本内容很长时,屏幕会有可能出现短暂的字符选择的界面。为了不显示这个画面,需要重写RichTextBox,接管WndProc方法中的 WM_PAINT 消息。


使用后的效果:使用jMyBox后的效果.gif


使用前的效果:

使用jMyBox前的效果.gif


我是郑鹏飞。 如果您觉得我的文章对您有帮助,可以点击站点上的 关于站点/支持和帮助
转载请注明 : 文章转载自不了阁-飞哥 blog.forbs.cn
本站文章除注明转载/出处外,均为本站原创或翻译。若要转载请务必注明出处,尊重他人劳动成果共创和谐网络环境。

相关文章

多域名的同一个网站,需要部署https,教你如何只用一个SSL证书即可完成部署,且不提示不安全的连接信息。URL重写(重定向插件IIS Write)的使用与规则设置方法

多域名的同一个网站,需要部署https,教你如何只用一个SSL证书即可完成部署,且不提示不安全的连接信息。URL重写(重定向插件IIS Write)的使用与规则设置方法

比如我的网站,我同时申请了两个域名vxmat.cn和vxmat.com,我需要实现1、两个域名都访问同一个网站;2、同时支持带www和不带www的访问;3、必须部署https,当用户以http方式访问...

同一个服务器一个IP部署多个带SSL证书的域名,访问时不需要输入端口的方法

同一个服务器一个IP部署多个带SSL证书的域名,访问时不需要输入端口的方法

同一台服务器,一个IP地址,多个域名,可以部署在同一台服务器上,并且是可以部署多张SSL证书的,只是SSL证书会认端口,所以,443端口就只能部署一张SSL证书,其它的域名怎么办呢?好办,就是要部署在...

为什么我的信息和通信变得不安全了?有办法解决吗?

为什么我的信息和通信变得不安全了?有办法解决吗?

总说通信不安全,您知道所谓的不安全,包括哪些方面,以及为什么会造成的吗?阅读过后,能让您每次在使用信息时,会想起这些方面的内容,偶尔能避免一下,也算是好的。1、被监听,这个在我的文章里可以看到确切的证...

拒绝了对对象 'sp_OACreate' (数据库 'mssqlsystemresource',架构 'sys')的 EXECUTE 权限。

拒绝了对对象 'sp_OACreate' (数据库 'mssqlsystemresource',架构 'sys')的 EXECUTE 权限。

    有个接口,我采用了MSSQL的存储过程执行时使用ServerXMLHTTP直接访问WebService接口的WSDL,直接在MSSQL里就可以使用SOAP协议访问接口,何必...

安全的Windows 3389远程连接维护服务器,我是如何做到的?-引言

安全的Windows 3389远程连接维护服务器,我是如何做到的?-引言

我想要实现:(个人觉得最完美的远程维护服务器的实现)      除了我之外,其它人都无法向我的远程维护端口发起TCP/UDP连接。     ...

如何使用VxTerm进行网络设备登录管理

如何使用VxTerm进行网络设备登录管理

咱们一般做设备,如安全设备、路由网关、交换机、服务器等运维管理时,一般都需要用到一个叫做SSH工具、Telnet工具的,下载一个VxTerm,就可以实现。软件地址:https://download.c...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。