VB.NET la coloration syntaxique dans une Zone de Texte enrichi

Je suis le codage d'un simple éditeur de code très simple langage de script que nous utilisons au travail. Ma coloration syntaxique de code fonctionne très bien si je le fais sur l'ensemble de la RichTextBox (rtbMain) mais quand j'essaie de l'obtenir pour travailler sur cette ligne, donc je peux l'exécution de la fonction avec rtbMain changements, c'est bizarre. Je n'arrive pas à comprendre pourquoi. Je suis même aller sur ce la bonne manière?

rtbMain est la principale zone de texte.
frmColors.lbRegExps est une liste de mots à mettre en évidence (plus tard il aura un peu plus puissant des expressions régulières.)
frmColor.lbHexColors est une autre zone de liste avec les correspondants hex couleurs pour les mots.

Private Sub HighLight(ByVal All As Boolean)
Dim RegExp As System.Text.RegularExpressions.MatchCollection
Dim RegExpMatch As System.Text.RegularExpressions.Match
Dim FirstCharIndex As Integer = rtbMain.GetFirstCharIndexOfCurrentLine
Dim CurrentLine As Integer = rtbMain.GetLineFromCharIndex(FirstCharIndex)
Dim CurrentLineText As String = rtbMain.Lines(CurrentLine)
Dim CharsToCurrentLine As Integer = rtbMain.SelectionStart
Dim PassNumber As Integer = 0
LockWindowUpdate(Me.Handle.ToInt32) 'Let's lock the window so it doesn't scroll all crazy.
If All = True Then 'Highlight everything.
For Each pass In frmColors.lbRegExps.Items
RegExp = System.Text.RegularExpressions.Regex.Matches(LCase(rtbMain.Text), LCase(pass))
For Each RegExpMatch In RegExp
rtbMain.Select(RegExpMatch.Index, RegExpMatch.Length)
rtbMain.SelectionColor = ColorTranslator.FromHtml(frmColors.lbHexColors.Items(PassNumber))
Next
PassNumber += 1
Next
Else 'Highlight just that row.
For Each pass In FrmColors.lbRegExps.Items
RegExp = System.Text.RegularExpressions.Regex.Matches(LCase(CurrentLineText), LCase(pass))
For Each RegExpMatch In RegExp
rtbMain.Select(RegExpMatch.Index + (CharsToCurrentLine - RegExpMatch.Length), RegExpMatch.Length)
rtbMain.SelectionColor = Color.Blue
Next
Next
End If
rtbMain.Select(CharsToCurrentLine, 0) 'Reset colors and positon and then unlock drawing.
rtbMain.SelectionColor = Color.Black
LockWindowUpdate(0)
End Sub
  • Que voulez-vous dire par "c'est bizarre"?
  • Avez-vous déjà utilisé Notepad++? Il est vraiment facile de créer la coloration syntaxique pour une langue définie par l'utilisateur et donc, vous ne avez même pas besoin d'écrire cela. Bien sûr, vous pourriez avoir d'autres raisons, mais si vous êtes juste de création autonome de l'éditeur c'est quelque chose à considérer.
  • Code pouvez obtenir bizarre si elle est précédée par "on Error Resume Next ".... =P. Mais sérieusement exactement ce qu'il fait quand il essaie juste d'analyser une seule ligne?
  • en obtenant bizarre, je veux dire, il met en évidence apparemment aléatoire des trucs. J'ai enlevé que Sur bit d'erreur lol 😛 et maintenant nous utiliser notepad++ et textpad, les deux sont très bien, mais je cherche à ajouter plus de pouvoir qu'ils ont.