2010-10-18 25 views
0

J'ai une zone RichTextBox avec un événement OnChanged. L'événement OnChanged doit regarder chaque ligne dans le RichTextBox et si la ligne est de première longueur, colorez-la en rouge, sinon colorez-la en noir. Comment puis-je faire cela? Je pense qu'il est possible de sélectionner de l'index a à l'index b et de définir la couleur de sélection, mais je pense que cela va perdre la position de mon curseur. Comment conserver la position du curseur? Merci pour vos suggestionsComment appliquer la mise en forme des couleurs à une zone Richtext * au fur et à mesure que l'utilisateur saisit * (VB.Net)

Répondre

0
Private Sub txtKeys_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtKeys.TextChanged 
    Dim iStart As Int32 = txtKeys.SelectionStart 
    Dim iPos As Int32 = 0 
    For Each s As String In Split(txtKeys.Text, vbLf) 
     If s.Length > 0 Then 
      txtKeys.Select(iPos, iPos + s.Length) 
      If isPrime(s.Length) Then 
       txtKeys.SelectionColor = Color.GreenYellow 
      Else 
       txtKeys.SelectionColor = Color.Black 
      End If 
     End If 
     iPos += s.Length + 1 
    Next 
    txtKeys.Select(iStart, 0) 
End Sub 

Désolé pour le manque de commentaires! J'imagine que cela deviendra massivement inefficace lorsqu'il est appliqué à une grande propriété .text, mais ce n'est pas l'utilisation prévue de la zone de texte.

1

Regardez SelectionStart et SelectionLength pour sélectionner le texte à mettre en surbrillance.

Pour conserver la position du curseur, je pense que vous pouvez simplement stocker le SelectionStart actuel avant de commencer à mettre en surbrillance, puis le réinitialiser à cette valeur après avoir terminé la surbrillance. Faites attention cependant si l'utilisateur continue à taper pendant que vous désactivez la mise en surbrillance. Vous devrez probablement intercepter les événements du clavier et les mettre en cache, puis les insérer après avoir réinitialisé le SelectionStart à l'emplacement correct (ou il sera peut-être plus facile, quoique moins convivial, d'ignorer les touches pendant que vous le faites la mise en évidence).

+0

Salut Merci pour votre réponse. Je sais que cela peut devenir assez difficile surtout si l'utilisateur a sélectionné un morceau de texte. Pour les besoins de ma demande, je suppose simplement qu'ils ont le curseur dans une position, ne pas sélectionner un bloc. Ma solution semble assez bien fonctionner. Merci. –