我开始学习VB.NET,并尝试做一个语法亮点。当我设置所选文本的颜色时出现问题。它改变了整个richtextbox的内容。
Private Sub txtText_TextChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtbText.TextChanged
Dim keywords As ArrayList
Dim index As Integer
Dim keyboardCursorPosition As Integer
keywords = New ArrayList()
keywords.Add(New Keyword("<?php", Color.Red))
keywords.Add(New Keyword("echo", Color.Blue))
keywords.Add(New Keyword("?>", Color.Red))
keyboardCursorPosition = rtbText.SelectionStart
For Each keyword As Keyword In keywords
index = rtbText.Text.IndexOf(keyword.getKey())
If index <> -1 Then
rtbText.Select(index, keyword.getKey().Length)
rtbText.SelectionColor = keyword.getColor()
rtbText.DeselectAll()
rtbText.SelectionStart = keyboardCursorPosition
End If
Next
End Sub
发布于 2010-06-25 20:50:49
你已经很接近了。不要忘记恢复SelectionColor:
Dim prevColor As Color = rtbText.SelectionColor
For Each keyword As KeyWord In keywords
'' etc...
Next
rtbText.SelectionColor = prevColor
顺便说一句:保持代码的整洁。rtb的消息处理程序不应命名为txtXxxx。这些小细节迟早会把你搞得一团糟(对我来说就是这样,找错了理由)。还要将关键字初始化移出该方法。
发布于 2010-06-25 23:00:59
好吧,试着重命名这个变量,看看是否有帮助
For Each key As KeyWord In keywords
发布于 2015-01-09 03:19:16
这是一种非常糟糕的方式,如果你想突出显示语法,那么可以看看Scintilla API或附加组件。它是免费的,并附带了600个工具来制作你自己的代码编辑器或预集成开发环境。
https://stackoverflow.com/questions/3121280
复制相似问题