RichTextBox vb.net 关键词高亮

Imports HWND = System.IntPtr


Public Class Form_Rules
Private Const WM_SETREDRAW As Integer = &HB
Private Shared Function SendMessage(ByVal hwnd As HWND,ByVal wMsg As Integer,ByVal wParam As Integer,ByVal lParam As IntPtr) As Integer
End Function
Dim index As Integer = 0
Private Sub Form_Rules_Load(sender As System.Object,e As System.EventArgs) Handles MyBase.Load
RichTextBox.WordWrap = False
End Sub
Private Sub RichTextBox_TextChanged(sender As System.Object,e As System.EventArgs) Handles RichTextBox.TextChanged
SendMessage(RichTextBox.Handle,WM_SETREDRAW,IntPtr.Zero)


RichTextBox.SelectAll()
RichTextBox.SelectionColor = Color.Black
Dim keystr As String = "and,end,if,then,or,else,+,true,false"
For i = 0 To UBound(keystr.Split(",")) - 1
Call GetKey(keystr.Split(",")(i),RichTextBox.Text)
RichTextBox.Select(index,0)
RichTextBox.SelectionColor = Color.Black
Next
SendMessage(RichTextBox.Handle,1,IntPtr.Zero)
' RichTextBox.Refresh()
End Sub


Public Function GetKey(ByVal P As String,ByVal S As String) As Integer
Dim CNT As Integer = 0
Dim M As Integer = P.Length
Dim N As Integer = S.Length
Dim SS As Char() = S.ToCharArray()
Dim PP As Char() = P.ToCharArray()
If M > N Then Return 0
For I = 0 To N - M + 1
Dim J As Integer = 0
For J = 0 To M
Try
If SS(I + J) <> PP(J) Then
Exit For
End If
Catch ex As Exception
End Try
If J = P.Length Then
RichTextBox.Select(I,P.Length)
RichTextBox.SelectionColor = Color.Red
CNT = CNT + 1
End If
Next
Next
Return CNT
End Function





End Class


防止闪烁:

Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As IntPtr) As IntPtr

LockWindowUpdate(RichTextBox.Handle)

LockWindowUpdate(0)

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...