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
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.
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).
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. –