所以,我正在尝试创建一个或两个函数来获取html标签,并将颜色与文本的其余部分区别开来(类似于Visual Studio对Dim
等关键字的处理方式)。我找到的唯一方法是使用富文本框,然后执行*.SelectionColor = Color.Blue
或类似的操作。有没有其他方法可以做到这一点?每当文本框更新时我都会这样做,它会将所有html标签更改为不同的颜色。这可以很好地使用一个非常短的html文件,但是当它们变得更大时,它需要太长时间,并且选择会移动光标。
那么,有没有其他方法可以做到这一点,即使我必须使用除富文本框之外的其他内容?如果没有,有没有人看到改善这种情况的方法?
以下是文本框更新时运行的两个函数。标签为蓝色,属性为红色,引号中的内容为绿色。
'//////////////////////////////////////////////////////////////////////////
'// findTag()
'// -finds a tag
'//////////////////////////////////////////////////////////////////////////
Private Function findTag()
Dim tag As String = ""
Dim i As Integer = 0
Dim startTag As Integer
While (i < txtCurrentFile.TextLength - 1)
If txtCurrentFile.Text(i) = "<" Then
startTag = i
While txtCurrentFile.Text(i) <> ">"
tag += txtCurrentFile.Text(i)
i += 1
End While
tag += ">"
colorCode(startTag, tag)
tag = ""
End If
i += 1
End While
Return Nothing
End Function
'//////////////////////////////////////////////////////////////////////////
'// colorCode()
'// -colors different tags accordingly
'//////////////////////////////////////////////////////////////////////////
Private Function colorCode(ByVal startIndex As Integer,
ByVal tag As String)
Dim i As Integer = 0
Dim isAttributes As Boolean = False
Do While (tag(i) <> " " And tag(i) <> ">")
txtCurrentFile.Select(startIndex + i, 1)
txtCurrentFile.SelectionColor = Color.Blue
i += 1
Loop
If i < tag.Length Then
Do Until (tag(i) = ">")
Do Until (tag(i) = Chr(34))
txtCurrentFile.Select(startIndex + i, 1)
txtCurrentFile.SelectionColor = Color.Red
i += 1
Loop
i += 1
Do Until (tag(i) = Chr(34))
txtCurrentFile.Select(startIndex + i, 1)
txtCurrentFile.SelectionColor = Color.Purple
i += 1
Loop
i += 1
Loop
txtCurrentFile.Select(startIndex + i, 1)
txtCurrentFile.SelectionColor = Color.Blue
End If
Return Nothing
End Function
答案 0 :(得分:3)
一些建议:
抛弃角色扫描仪。将其替换为速度更快的任何内容(RegEx,HTML Agility Pack,...)
如果你真的想保留角色扫描仪,那么将扫描限制在修改周围的区域(比如光标后面和前面200个字符)
在开始颜色处理之前记住光标的位置,并在完成后将其恢复。
实现在单独的线程上执行完整文件重新着色的背景着色器(如果用户在着色器运行时没有进行任何更改,则必须克隆RTB并仅应用更改)。
答案 1 :(得分:2)
......我不知道这是否适用于所有!!!,但如果它确实可能会很酷......
也许在webbrowser控件中打开文件并在css表中设置着色规则??
同样,我不知道这是不是一个好主意,但它可能会很好地完成这个技巧,因为它已经是你正在处理的HTML ......