2010-06-25 6 views
3

J'ai commencé à apprendre VB.NET et j'essaie de faire une mise en évidence de la syntaxe. Le problème se produit lorsque je définis la couleur du texte sélectionné. Il change le contenu de l'ensemble richtextbox.VB.NET: Syntax Highlight

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 

Répondre

2

Vous êtes assez proche. N'oubliez pas de restaurer la SelectionColor:

Dim prevColor As Color = rtbText.SelectionColor 
    For Each keyword As KeyWord In keywords 
     '' etc... 
    Next 
    rtbText.SelectionColor = prevColor 

Btw: gardez votre code propre. Un gestionnaire de message pour un rtb ne doit pas être nommé txtXxxx. Ces petits détails vous bousilleront tôt ou tard (ça l'a fait pour moi, à la recherche de la mauvaise raison). Déplacez également l'initialisation du mot clé hors de la méthode.

+0

Ah, je pensais que c'était mais j'ai décidé de l'essayer avant de poster une réponse et je ne pouvais pas comprendre pourquoi cela ne fonctionnait pas (pour une raison quelconque, j'ai mis le 'rtbText.SelectionColor = prevColor' juste après le 'DeselectAll' ...), merci de me faire sentir moins confus :) –

0

Eh bien, essayez renommer la variable et voir si elle aide

For Each key As KeyWord In keywords 
0

C'est une très mauvaise, si vous voulez coloration syntaxique puis regardez l'API Scintilla ou add-on. C'est gratuit et livré avec 600 outils pour faire votre propre éditeur de code ou pré IDE.